腳本特性
- 支援多 MySQL 實例(參數指定 host ID)
- 自動發現庫中所有表,單表單獨導出,便於單表恢復
- 打包為
.tar,保留最近 N 份,自動清理舊備份
- 詳細日誌記錄耗時、檔案大小,支援
mutt 郵件通知
使用方式
./mysql_data_backup.sh 110 www_cas
./mysql_data_backup.sh 112 www_qiche
# 參數1:host ID(腳本內映射 IP/帳密),參數2:資料庫名
核心代碼邏輯
#!/bin/bash
# 參數檢查與實例映射
if [ $1 -eq 110 ]; then db_host=192.168.1.110; db_user=xxx; db_passwd=xxx; fi
if [ $1 -eq 112 ]; then db_host=192.168.1.112; db_user=xxx; db_passwd=xxx; fi
db_name=$2
tables=$(mysqlshow -u$db_user -p$db_passwd -h$db_host $db_name | sed 's/|//g; s/ //g; 1,4d; $d')
# 逐表導出
for table in $tables; do
mysqldump -e -h $db_host -u $db_user -p$db_passwd $db_name $table > $fileDir/$table.sql
done
# 打包
tar cvf ${datestamp}.tar ./${datestamp}
rm -rf ./${datestamp}
# 保留最近 3 份
find $backupDir -name "*.tar" | sort -r | tail -n +4 | xargs rm -f
Windows 批次恢復腳本(配合導出的單表 SQL)
:: main.bat
for %%b IN (./*.sql) DO @restore.bat %%b
:: restore.bat
@echo off
pause
echo 正在還原 %1
mysql -h localhost -u root -t database1 --default-character-set=utf8 -e "source %1"
echo 完成 %1
生產環境強化建議
- 並行導出:使用
mydumper 或 & 後台並行 + wait,大幅縮短備份窗口
- 上傳異地:
scp / rsync / aws s3 cp / ossutil cp 推送至對象存儲
- 校驗完整性:導出後
md5sum 記錄,恢復前校驗
- 監控告警:腳本返回非 0 碼觸發 Zabbix/PagerDuty 告警
- 加密:
openssl enc -aes-256-cbc -salt -in backup.sql -out backup.sql.enc