从库读到的数据比主库旧,监控显示延迟从几秒涨到几百秒,业务读到过期数据。日志里能对上时间点,这种反而好排。

从库单线程回放遇到大事务或缺少主键导致全表扫描,回放速度跟不上主库写入。这一点先确认清楚,后面就不用反复试。

SHOW SLAVE STATUS\G
SHOW VARIABLES LIKE 'slave_parallel_workers';
SET GLOBAL slave_parallel_workers = 4;

「MySQL 主从延迟」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

处理上按这个顺序:确认是否有大事务或批量更新;检查从库回放线程与并行配置;读请求按延迟切换或强制走主库。

结果对不对很好判断,延迟指标回落到秒级,业务读取的数据与主库一致。

作者 9823189