首页/系统/Linux 运维命令速查/场景:每日数据库备份任务全套写法
定时任务与计划50 条

场景:每日数据库备份任务全套写法

一个可上线的日备任务:锁防重入、超时、退出码、留存策略、日志轮转与失败告警位,一次配好长期不慌。

Linux 运维命令速查系统更新于 2026-10-12
场景每天 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),并定期做恢复演练。

易错点

  • mysqldump 走 --all-databases 时锁与一致性策略要按引擎区分(MyISAM 需 --lock-tables)
  • rm -f 删除旧备份时当心变量为空:先 [[ -n $DEST ]] 再删:先 [[ -n $DEST ]] 再删

数据来源与参考

  • MySQL 8.0 Reference Manual(mysqldump --single-transaction)
  • man 1 flock
  • man 1 timeout

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌