逐日 AI

MySQL 自动备份的完整配置:从 crontab 到异地存储

作者:夸父

一份可以直接抄的 MySQL 自动备份配置:备份脚本、crontab 定时、异地同步(rclone 到 OSS)、保留策略与失败告警——20 分钟配好,永久安心。

完整备份脚本(复制即用)

#!/bin/bash
# /opt/scripts/mysql-backup.sh
DATE=$(date +%F)
DIR=/backup/mysql
KEEP_DAYS=30
WEBHOOK="你的通知webhook地址"

mkdir -p $DIR

# 备份
mysqldump --single-transaction --routines -u backup_user -p'密码' aivideo   | gzip > $DIR/db-$DATE.sql.gz

# 检查结果并通知
if [ ${PIPESTATUS[0]} -eq 0 ] && [ -s $DIR/db-$DATE.sql.gz ]; then
  SIZE=$(du -h $DIR/db-$DATE.sql.gz | cut -f1)
  curl -s -X POST "$WEBHOOK" -d "{"msg": "✅ 数据库备份成功 $SIZE"}" > /dev/null
else
  curl -s -X POST "$WEBHOOK" -d "{"msg": "❌ 数据库备份失败!"}" > /dev/null
fi

# 清理 30 天前的本地备份
find $DIR -name "db-*.sql.gz" -mtime +$KEEP_DAYS -delete

# 异地同步(rclone 配好 remote 后启用)
# rclone copy $DIR/db-$DATE.sql.gz remote:mysql-backup/

crontab 定时

chmod +x /opt/scripts/mysql-backup.sh
crontab -e
# 加入:每天凌晨 3 点执行
0 3 * * * /opt/scripts/mysql-backup.sh

四个关键细节

1. --single-transaction:InnoDB 表的一致性备份(不锁表,业务无感)。2. 备份用户:单独建一个只有 SELECT 和 LOCK TABLES 权限的备份账号(见Key 安全的最小权限原则)。3. 备份的备份:脚本末尾的 rclone 同步到 OSS——同机备份防误删,异地备份防灾难,两层都要。4. 失败通知:备份失败时 webhook 告警——沉默的失败比失败本身危险。

恢复的命令(演练用)

gunzip < /backup/mysql/db-2026-10-30.sql.gz | mysql -u root -p aivideo

每季度跑一次恢复演练:在测试库执行,抽查数据完整性——演练通过的备份才是真备份(完整方案见备份手册)。

常见问题

备份脚本失败了怎么知道?

脚本里加失败通知(curl 推送到微信/钉钉的 webhook)——备份失败比备份成功更需要被知道。另加"备份文件存在性检查"到每周例行(见[运维打卡](/guides/gongju-daka))。

备份要保留多久?

建议 30 天(日备)+ 每月一个永久档。存储成本可控(压缩后的 SQL 文本很小),而"三个月前的数据"在纠纷追溯、误操作回滚时经常救命。

三步,出你的第一条片

套用一个案例模板,替换成你的内容——注册后即可进入工作台逐段生成、合成导出。

反馈建议