腳本特色
- 每日單次執行,保留最近 5 天備份。
- 支援三種備份模式:
mysqldump(邏輯)、mysqlhotcopy(實體熱備)、tar(冷備份,需停服務)。
- 內建日誌記錄、舊檔自動清理、重複備份檢查。
完整腳本 auto_db_backup.sh
#!/bin/bash
# 設定區
DBName=mysql
DBUser=root
DBPasswd=
BackupPath=/root/
LogFile=/root/db.log
DBPath=/var/lib/mysql/
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] The Backup File 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 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
部署步驟
- 修改設定區變數(資料庫名、帳密、路徑、備份模式)。
chmod +x auto_db_backup.sh
- 測試執行:
./auto_db_backup.sh
- 加入
crontab -e:
0 3 * * * /path/auto_db_backup.sh
模式選擇建議
| 模式 | 優點 | 缺點 | 適用場景 |
| mysqldump | 跨版本/引擎可移植、不停機 | 大庫較慢、鎖表影響寫入 | 中小型、需異地/跨版本還原 |
| mysqlhotcopy | 僅鎖表不停機、速度快 | 僅支援 MyISAM、本機檔案系統 | MyISAM 為主、本機快速備份 |
| tar (冷備份) | 最簡單、檔案級完整 | 需停機、跨版本風險高 | 可接受停機窗口、純 MyISAM |