腳本功能
- 支援三種備份方式:
mysqldump、mysqlhotcopy、tar(直接打包數據目錄)。
- 每天僅執行一次,自動刪除 5 天前的舊備份文件。
- 記錄詳細操作日誌,便於排查問題。
- 可通過
crontab 設置為凌晨自動運行。
完整腳本代碼
#!/bin/bash
# This is a Shell Script For Auto DB Backup
# Powered by aspbiz
# 2004-09
# ===== 配置區 =====
DBName=mysql
DBUser=root
DBPasswd=
BackupPath=/root/
LogFile=/root/db.log
DBPath=/var/lib/mysql/
# BackupMethod=mysqldump
# BackupMethod=mysqlhotcopy
BackupMethod=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
# 刪除舊備份
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] The Backup File is exists, Can't Backup!" >> $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 -czf $NewFile $DumpFile
rm -f $DumpFile
;;
mysqlhotcopy)
mysqlhotcopy -u $DBUser -p $DBPasswd $DBName $BackupPath
cd $BackupPath
tar -czf $NewFile $DBName
rm -rf $DBName
;;
tar)
tar -czf $NewFile $DBPath
;;
*)
echo "Unknown BackupMethod: $BackupMethod" >> $LogFile
exit 1
;;
esac
echo "[$NewFile] Backup Success!" >> $LogFile
fi
部署步驟
- 將腳本保存為
/root/auto_backup.sh,授予執行權限:
chmod +x /root/auto_backup.sh
- 編輯
crontab -e,添加定時任務(每天凌晨 2:30 執行):
30 2 * * * /root/auto_backup.sh
- 確保
BackupPath 目錄可寫,且 MySQL 服務運行中。
注意事項
tar 方式需停止寫入或鎖表,否則可能備份不一致;生產環境建議用 mysqldump --single-transaction(InnoDB)或 mysqlhotcopy(MyISAM)。
- 日誌文件
db.log 會持續增長,建議定期清理或配置 logrotate。
- 密碼為空時
-p 參數不可加空格,腳本中已做判斷處理。