linux下使用logrotate自動備份mysql數據庫

logrotate是linux下的一個日誌文件管理工具。apache,nignx或系統的log文件如不處理, 正常情況下會慢慢變的大, 久了, 硬盤就會爆掉。 logrotate(配合cron)就是用來周期性分割、壓縮、刪除日誌文件用的。前段時間在找mysql數據庫的自動備份方法的時候, 在 http://islandlinux.org/howto/automated-mysql-backups 看到了使用logrotate來備份mysql數據庫的偏方, 感覺不錯, 在這裡和大家分享一下。

首先, 先創建一個腳本文件

nano /usr/local/sbin/mysql_auto_backup.sh

貼入如下內容

#!/bin/sh
#
# 作者 Dallas Vogels 2008-10-01
#
export PATH=/bin:/usr/bin:/sbin:/usr/sbin

OUTPUTDIR="/root/mysql-backups" #將這裡修改成你要放備份文件的目錄
OPTIONS="--all --complete-insert --add-drop-table --extended-insert --quote-names"
CONFIG_FILE="/root/.my.cnf.backup"

# 檢查備份目錄是否存在
if [ ! -d $OUTPUTDIR ]; then
        mkdir $OUTPUTDIR
fi

# 獲取數據庫列表
DATABASES=`echo "SHOW DATABASES" | mysql --defaults-file="$CONFIG_FILE" mysql`

for DATABASE in $DATABASES; do
# 不備份 Database 和 information_schema 這兩個數據庫
  if [ "$DATABASE" != "Database" -a "$DATABASE" != "information_schema" ]; then
    # 數據庫備份開始
    mysqldump --defaults-file="$CONFIG_FILE" $OPTIONS $DATABASE > $OUTPUTDIR/$DATABASE.sql
  fi

done

exit 0

將這個備份腳本添加可執行屬性:

sudo chmod og-rwx /usr/local/sbin/mysql_auto_backup.sh

運行mysql

mysql -u root -p

給mysql添加專門用來備份數據庫的用戶:

GRANT SELECT, LOCK TABLES ON *.* TO mysqlbackup@localhost IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

注意將password換成你想要設定的密碼。

新創建一個mysql配置文件:

nano /root/.my.cnf.backup

將這個mysql備份用戶信息加到裡面:

[client]
user="mysqlbackup"
password="password"

注意再次換密碼。

設置好這個文件的屬性:

chmod og-rwx /root/.my.cnf.backup

現在可以測試一下數據備份腳本了,運行:

/usr/local/sbin/mysql_auto_backup.sh

如果可以在設定的目錄(/root/mysql-backups)找到mysql數據庫dump出來的sql文件,那到目前為止一切正常,繼續。

創建用來自動備份mysql數據庫的logrotate配置文件:

nano /etc/logrotate.d/mysql-backups

貼入如下內容:

/root/mysql-backups/*.sql {
  weekly
  copy
  missingok
  rotate 30
  compress
  notifempty
  create 640 root adm
  sharedscripts
  prerotate
    /usr/local/sbin/mysql_auto_backup.sh
  endscript
}

上面的設置會每周一次地將mysql中所有除Database和information_schema之外的數據庫自動dump到/root/mysql-backups/目錄中, 並自動將dump文件壓縮成gz格式(如果不希望壓縮,去掉上面的compress行)。
如果希望將數據備份周期改到每天一次, 直接將上面logrotate配置文件weekly改成daily就可以了(每月一次是monthly)
上面的腳本會自動保留最近30個備份(注意rotate 30參數, 修改30可設置保留的備份數)

最後測試一下logrotate配置文件有沒有問題,強制運行logrotate:

logrotate -f /etc/logrotate.d/mysql-backups

這時/root/mysql-backups/目錄應該出來gz格式的mysql數據庫備份文件。

這時用logrotate的自動mysql數據庫的備份部署完成了。這樣每星期到/root/mysql-backups/目錄下載mysql備份文件就可了。

此條目發表在 站長文檔 分類目錄,貼了 , , , , 標籤。將固定鏈接加入收藏夾。

發表評論