腳本特性
- 放入
crontab 每日凌執行一次
- 支援三種備份方式:
tar(默認)、mysqldump、mysqlhotcopy
- 自動刪除 5 天前備份,保留最近 5 份
- 詳細日志記錄
完整腳本(auto_db_backup.sh)
#!/bin/bash
# Auto MySQL Backup Script
# 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] Backup File Exists, Skip!" >> $LogFile
exit 0
fi
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)
tar czvf $NewFile $DBPath >> $LogFile 2>&1
echo "[$NewFile] Backup Success!" >> $LogFile
;;
*)
echo "Unknown BackupMethod: $BackupMethod" >> $LogFile
exit 1
;;
esac
部署步驟
- 保存為
/root/auto_db_backup.sh,chmod +x。
- 編輯
crontab -e:
0 2 * * * /root/auto_db_backup.sh (每天 02:00 執行)
- 觀察
/root/db.log 確認運行狀態。
備份方式選擇建議
| 方式 | 優點 | 缺點 | 適用場景 |
| tar | 最簡單、無需停服務(若為 MyISAM 需鎖表) | InnoDB 需停服務或配合 LVM 快照 | 小型 MyISAM 庫、測試環境 |
| mysqldump | 邏輯備份、跨版本/引擎遷移方便 | 大庫導出/導入慢 | 中小型庫、異構遷移 |
| mysqlhotcopy | 物理複製極快、僅 MyISAM | 不支援 InnoDB、需鎖表 | 大型純 MyISAM 庫 |