夜间备份任务经常失败,提示等待表锁超时,业务高峰期也会被拖慢。日志里能对上时间点,这种反而好排。

默认备份会对表加读锁以保证一致性,大表加锁时间长,遇到长查询就超时。这一点先确认清楚,后面就不用反复试。

mysqldump --single-transaction --quick --lock-tables=false \
  --set-gtid-purged=OFF db > db.sql

「mysqldump 锁表」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。改完隔一天再看一次,当场正常不代表能稳住。

处理上按这个顺序:使用单事务一致性快照;拆分库表分批备份;避开业务高峰。

结果对不对很好判断,备份能完整结束且业务无感知,恢复演练数据一致。

作者 9823189