mysqldump --single-transaction --quick --lock-tables=false \ blog > db.sql
备份窗口两小时里,下单接口大量超时,订单表写入等待超过 30 秒,备份一结束就恢复正常。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,mysqldump 默认对表加读锁保证一致性,备份期间写入排队。表越大锁得越久,业务直接被拖住。
围绕「备份锁写」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。改完隔一天再看一次,当场正常不代表能稳住。
测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
处理上按这个顺序:加 --single-transaction 用事务拿一致性快照 不锁表;只对 InnoDB 表有效 先确认表引擎;备份放到从库执行 主库不参与。
改完只确认一件事:备份期间下单接口 P99 保持在 300ms 以内,没有超时。
