腳本特性
- 支援
mysqldump、mysqlhotcopy、tar(冷備份)三種模式
- 自動清理 5 天前舊備份
- 單日單次執行,配合 crontab 定時運行
- 詳細日誌記錄
完整腳本 auto_db_backup.sh
#!/bin/bash
# MySQL Auto Backup Script
# 保留最近 5 天備份,每日執行一次
# ========== 使用者配置區 ==========
DBName="mysql" # 要備份的資料庫名
DBUser="root" # 資料庫用戶
DBPasswd="" # 密碼(空則不加 -p)
BackupPath="/root/" # 備份檔存放目錄
LogFile="/root/db.log" # 日誌檔
DBPath="/var/lib/mysql/" # 資料目錄(tar 模式用)
BackupMethod="tar" # 可選:mysqldump | mysqlhotcopy | tar
# ===================================
NewFile="${BackupPath}db$(date +%y%m%d).tgz"
DumpFile="${BackupPath}db$(date +%y%m%d)"
OldFile="${BackupPath}db$(date +%y%m%d --date='5 days ago').tgz"
echo "-------------------------------------------" >> $LogFile
echo "$(date +'%y-%m-%d %H:%M:%S')" >> $LogFile
echo "--------------------------" >> $LogFile
# 刪除 5 天前舊備份
if [ -f "$OldFile" ]; then
rm -f "$OldFile" >> $LogFile 2>&1
echo "[$OldFile] Delete Old File Success!" >> $LogFile
else
echo "[$OldFile] No Old Backup File!" >> $LogFile
fi
# 若今日備份已存在則跳過
if [ -f "$NewFile" ]; then
echo "[$NewFile] Backup File Exists, Skip!" >> $LogFile
else
case $BackupMethod in
mysqldump)
if [ -z "$DBPasswd" ]; then
mysqldump -u $DBUser --opt $DBName > $DumpFile
else
mysqldump -u $DBUser -p$DBPasswd --opt $DBName > $DumpFile
fi
tar czvf $NewFile $DumpFile >> $LogFile 2>&1
echo "[$NewFile] Backup Success!" >> $LogFile
rm -rf $DumpFile
;;
mysqlhotcopy)
rm -rf $DumpFile
mkdir $DumpFile
if [ -z "$DBPasswd" ]; then
mysqlhotcopy -u $DBUser $DBName $DumpFile >> $LogFile 2>&1
else
mysqlhotcopy -u $DBUser -p $DBPasswd $DBName $DumpFile >> $LogFile 2>&1
fi
tar czvf $NewFile $DumpFile >> $LogFile 2>&1
echo "[$NewFile] Backup Success!" >> $LogFile
rm -rf $DumpFile
;;
*) # tar 冷備份:需停止服務
/etc/init.d/mysqld stop >/dev/null 2>&1
tar czvf $NewFile $DBPath$DBName >> $LogFile 2>&1
/etc/init.d/mysqld start >/dev/null 2>&1
echo "[$NewFile] Backup Success!" >> $LogFile
;;
esac
fi
echo "-------------------------------------------" >> $LogFile
部署與排程
chmod +x auto_db_backup.sh
# 測試執行
./auto_db_backup.sh
# 加入 crontab 每天凌晨 2:30 執行
crontab -e
30 2 * * * /root/auto_db_backup.sh
三種模式選擇指南
| 模式 | 適用場景 | 優點 | 缺點 |
| mysqldump | 中小資料庫、需跨版本遷移 | 邏輯備份、可編輯、相容性強 | 大資料庫較慢、需鎖表 |
| mysqlhotcopy | MyISAM 表、本機備份 | 速度快、不停服務 | 僅支援 MyISAM、需本機執行 |
| tar (冷備份) | InnoDB/MyISAM 混合、追求最簡單 | 檔案級複製、最完整 | 需停機、備份窗口長 |
進階擴充建議
- 加入
gpg 加密備份檔
- 使用
rsync/scp 異地備份
- 整合
mysqlbinlog 做增量備份(PITR)
- 監控備份成功與否,失敗發送郵件/簡訊告警