基於 Innobackupex 的 MySQL 熱備份腳本:全量/增量自動化與郵件通知
腳本設計原則
- 周日、三:全量備份
- 周一、二、四、五、六:增量備份(基於最近一次全量/增量的 LSN)
- 保留 5 天備份與日誌,自動清理過期檔案
- 備份結果郵件通知(成功/失敗)
核心腳本片段
#!/bin/bash
# 參數解析:--backup-dir --defaults-file --host --port --user --password
# 環境初始化
physicalBackupDir=${backupDir}/physical
logDir=${backupDir}/log
checkPointDir=${backupDir}/checkpoint
cmdInno=/usr/bin/innobackupex
sock=/tmp/mysql.sock
day=$(date +%w) # 0=Sun, 3=Wed
dt=$(date +%Y%m%d)
ts=$(date +%Y%m%d%H%M%S)
# 全量備份函數
back_full() {
$cmdInno --user=$mysqlUser --password=$mysqlPassword --no-timestamp \
--defaults-file=$defaultFile $physicalBackupDir/$dt/base_$dt --socket=$sock \
2> ${logDir}/bak_${ts}.log
# 提取 LSN 供下次增量使用
grep last_lsn $physicalBackupDir/$dt/base_$dt/xtrabackup_checkpoints | cut -b 12- \
> $checkPointDir/ckp_${dt}
}
# 增量備份函數
back_inc() {
basedir=$physicalBackupDir/$(date -d "$1 days ago" +%Y%m%d)
$cmdInno --user=$mysqlUser --password=$mysqlPassword --socket=$sock --no-timestamp \
--defaults-file=$defaultFile --incremental $basedir/inc_$dt \
--incremental-lsn=$(cat $checkPointDir/ckp_$(date -d "$1 days ago" +%Y%m%d)) \
2> ${logDir}/bak_${ts}.log
grep last_lsn $basedir/inc_$dt/xtrabackup_checkpoints | cut -b 12- \
> $checkPointDir/ckp_$dt
}
# 排程邏輯
case $day in
0|3) back_full ;; # Sun, Wed
1) back_inc 1 ;; # Mon 基於 Sun
2) back_inc 2 ;; # Tue 基於 Mon
4) back_inc 1 ;; # Thu 基於 Wed
5) back_inc 2 ;; # Fri 基於 Thu
6) back_inc 3 ;; # Sat 基於 Fri
esac
# 清理 5 天前檔案
find $physicalBackupDir -type f -mtime +5 -exec rm {} \;
find $logDir -type f -mtime +5 -exec rm {} \;
# 郵件通知
if grep -q "innobackupex: completed OK!" $logFile; then
mutt -s "MySQL 熱備份成功 $(hostname)" $mailadd < $logFile
else
mutt -s "MySQL 熱備份失敗 $(hostname)" $mailadd < $logFile
fi
部署範例
# 呼叫腳本
cat /db_scripts/call_innobk.sh
#!/bin/bash
/db_scripts/innobk.sh --backup-dir=/data/backup --host=127.0.0.1 --port=3306 --user=innobk --password=InnoBK
# Crontab 定時任務
0 3 * * * /db_scripts/call_innobk.sh
# 備份目錄結構
/data/backup/
├── checkpoint/ # LSN 檢查點
├── log/ # 詳細日誌
└── physical/
├── 20150107/
│ ├── base_20150107/ # 全量
│ ├── inc_20150108/ # 增量
│ ├── inc_20150109/
│ └── inc_20150110/
關鍵優勢
- 免停機熱備份,不阻塞寫入
- 增量備份僅複製變更頁面,速度快、佔用小
- LSN 鏈式追蹤確保增量鏈完整性
- 自動清理與郵件告警,適合生產環境無人值守運行