首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

基於 XtraBackup 2.3.5 的 MySQL 全量/增量自動化備份腳本(含過期清理、日誌記錄)

     編輯:MySQL 綜合教學

腳本功能特性

  • 支援 XtraBackup 2.3.5+
  • 策略:週四、週日全量;其餘工作日增量;可手動指定 WEEK_NUM 強制類型。
  • 自動尋找最新全量備份作為增量基準,支援增量鏈式疊加。
  • 完整日誌記錄(成功/警告/錯誤帶顏色),備份失敗自動退出並保留錯誤日誌。
  • 自動清理 7 天前的全量與對應增量備份目錄。
  • 依賴系統 profile 載入環境變數,兼容 cron 定時執行。

核心配置區塊(按需修改)

INNOBACKUPEX=innobackupex
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_HOST=localhost
MYSQL_PORT=3306
MY_CNF=/etc/my.cnf
BACKUP_DIR=/mysql_backup
FULLBACKUP_DIR=$BACKUP_DIR/full
INCRBACKUP_DIR=$BACKUP_DIR/incre
BACKUP_LOG_DIR=$BACKUP_DIR/log

關鍵邏輯解析

1. 環境檢查

  • innobackupex -v 確認工具存在。
  • netstat -lnt | grep $MYSQL_PORT 確認 MySQL 監聽端口。
  • mysql -s $MYSQL_CMD -e 'exit' 驗證連線認證。

2. 備份類型判斷

WEEK_NUM=$(date +%w)  # 0=Sun, 1=Mon...6=Sat
if [ $WEEK_NUM -eq 1 -o $WEEK_NUM -eq 2 -o $WEEK_NUM -eq 3 -o $WEEK_NUM -eq 5 -o $WEEK_NUM -eq 6 ]; then
  # 增量備份邏輯
elif [ $WEEK_NUM -eq 0 -o $WEEK_NUM -eq 4 ]; then
  # 全量備份邏輯
fi

3. 增量備份基準目錄自動推導

  • 掃描 $FULLBACKUP_DIR 取最新目錄名(按名稱倒序)。
  • 在 $INCRBACKUP_DIR/$LATEST_FULL 下找最新增量目錄;若無則以全量目錄為基準,否則以最新增量為基準。

4. 執行備份並檢查結果

$INNOBACKUPEX --defaults-file=$MY_CNF $MYSQL_CMD --incremental $NEW_INCRDIR --incremental-basedir $INCRBASEDIR > $TMP_LOG 2>&1
check_innobackupex_fail() {
  if [ -z "$(tail -2 $TMP_LOG | grep 'completed OK!')" ]; then
    LogErrorMsg "備份失敗"; exit 1
  fi
}

5. 過期清理

find $FULLBACKUP_DIR/ -mindepth 1 -maxdepth 1 -type d -mtime +7 -printf "%P\n" | while read efile; do
  rm -rf $FULLBACKUP_DIR/$efile
  rm -rf $INCRBACKUP_DIR/$efile
done

部署建議

  1. 將腳本存為 /usr/local/bin/mysql_backup.sh,chmod +x。
  2. 以 mysql 或 root 用戶加入 crontab:
    0 2 * * * /usr/local/bin/mysql_backup.sh(每天凌晨 2 點執行)。
  3. 定期檢查 $BACKUP_LOG_DIR 下日誌,確認備份狀態。
  4. 恢復演練:定期在測試環境用 --copy-back 驗證備份可用性;若需恢復到故障時間點,需結合 Binlog 進行 PITR。

完整腳本下載

文中已提供完整可執行 Shell 腳本,含顏色日誌函數、錯誤處理、過期清理等生產級特性,可直接投入使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved