| 场景 | 每天 02:30 备份 MySQL 并保留 14 天 |
|---|---|
| 要点 | 锁 / 超时 / 留存 / 日志 |
| 验收 | 次日看文件与日志 |
备份脚本
备份脚本
#!/usr/bin/env bash
set -euo pipefail
LOG=/var/log/app/mysql-backup.log; DEST=/backup/mysql
log(){ echo "$(date -Is) $*" >> "$LOG"; }
exec 9>/var/lock/mysql-backup.lock
flock -n 9 || { log "skip: running"; exit 0; }
mkdir -p "$DEST"
rm -f "$DEST"/dump-$(date -d '14 days ago' +\%F).sql.gz
timeout 7200 mysqldump --single-transaction --all-databases | gzip > "$DEST/dump-$(date +\%F).sql.gz"
log "done size=$(du -h "$DEST/dump-$(date +\%F).sql.gz" | cut -f1)"crontab 与验收
crontab 与验收
30 2 * * * /opt/scripts/mysql-backup.sh >> /var/log/app/mysql-backup.cron.log 2>&1
# 次日验收
ls -lh /backup/mysql/ | tail
tail -n 5 /var/log/app/mysql-backup.log备份任务最忌「只看进程退出码」:gzip 后要校验大小与可解压(gzip -t),并定期做恢复演练。