首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 自動備份 Shell 腳本:定時全量/增量、壓縮加密、FTP 上傳、失敗郵件告警

     編輯:MySQL 資料庫相關知識

腳本功能特色

  • 週日全量、其它日增量(tar -g 快照檔)。
  • 全庫 mysqldump + gzip -9 壓縮。
  • lftp 自動上傳至遠端 FTP(目錄按日期分層)。
  • 上傳失敗發送郵件告警,成功自動清理本地暫存。

核心變數配置區

DIRS="/home/www"                    # 檔案備份目錄
BACKUP="/tmp/backup.$$"             # 暫存目錄
INCFILE="/home/www/inc.snar"        # 增量快照檔
FULLBACKUP="7"                      # 週日(7)全量
MUSER="backup_user"                 # MySQL 備份帳號
MPASS="strong_password"
MHOST="127.0.0.1"
FTPD="/backup/mysql"                # FTP 根目錄
FTPU="ftp_user"
FTPP="ftp_pass"
FTPS="backup.example.com"
EMAILID="dba@example.com"

關鍵邏輯片段

# 判斷全量/增量
if [ "$(date +%u)" == "$FULLBACKUP" ]; then
    FILE="fs-full-$(date +%F).tar.gz"
    tar -zcvf "$BACKUP/$FILE" "$DIRS"
else
    FILE="fs-inc-$(date +%F-%Hh%Mm%Ss).tar.gz"
    tar -g "$INCFILE" -zcvf "$BACKUP/$FILE" "$DIRS"
fi

# MySQL 全庫備份
DBS=$(mysql -u"$MUSER" -h"$MHOST" -p"$MPASS" -Bse 'SHOW DATABASES')
for db in $DBS; do
    mysqldump -u"$MUSER" -h"$MHOST" -p"$MPASS" "$db" | gzip -9 > "$BACKUP/mysql-$db.$(date +%F-%T).gz"
done

# lftp 上傳
lftp -u "$FTPU,$FTPP" "$FTPS" <

部署建議

  1. 建立專用備份帳號:GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'backup_user'@'localhost' IDENTIFIED BY 'strong_password';
  2. crontab -e:0 2 * * * /opt/scripts/mysql_backup.sh >/dev/null 2>&1(每天 02:00 執行)。
  3. 定期測試恢復:gunzip < backup.sql.gz | mysql -u root -p test_db。
  4. 生產環境建議改用 xtrabackup (Percona) 實現 InnoDB 熱備份、流式傳輸、增量合併,效能遠優於 mysqldump。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved