生產環境資料庫備份需「零人工介入、自動清理、失敗告警」。本文提供經驗證的 Shell 腳本,支援多庫備份、壓縮打包、保留策略、日誌記錄,配合 crontab 即可落地。
#!/bin/bash
# 配置區
DB_USER="root"
DB_PASS="123456"
DBS="blog.ewsd.cn dangjian.ewsd.cn idc.ewsd.cn shangfa.ewsd.cn"
BACKUP_PATH="/home/mysqlbackup"
RETENTION_DAYS=30
# 初始化
[ ! -d "$BACKUP_PATH" ] && mkdir -p "$BACKUP_PATH"
cd "$BACKUP_PATH"
DATE_PREFIX=$(date +%Y-%m-%d)
BACKUP_NAME="mysql_${DATE_PREFIX}"
# 逐庫備份
for DB in $DBS; do
mysqldump -u"$DB_USER" -p"$DB_PASS" -S /tmp/mysql.sock "$DB" > "${BACKUP_NAME}_${DB}.sql"
if [ $? -eq 0 ]; then
echo "$(date +%Y-%m-%d) $DB mysqldump success" >> mysql.log
else
echo "$(date +%Y-%m-%d) $DB mysqldump failed" >> mysql.log
exit 1
fi
done
# 壓縮打包
tar -czf "${BACKUP_NAME}.tar.gz" *.sql
if [ $? -eq 0 ]; then
echo "$(date +%Y-%m-%d) tar success" >> mysql.log
else
echo "$(date +%Y-%m-%d) tar failed" >> mysql.log
exit 1
fi
# 清理中間檔與過期備份
rm -f *.sql
OLD_BACKUP="mysql_$(date -d \"${RETENTION_DAYS} days ago\" +%Y-%m-%d).tar.gz"
rm -f "$OLD_BACKUP"
$?,失敗即時記錄日誌並終止,防止產生損壞備份chmod +x mysql_backup.sh0 2 * * * /path/to/mysql_backup.sh安全提醒:生產環境建議使用 --defaults-extra-file 指定密碼檔,避免明文密碼出現在進程列表。