MySQL 主从延迟排查:从库落后 3 小时,用户读到了三个月前的旧数据
引言 两个投诉,隔着不到十分钟打进来,把一个普通的周四下午变成了事故复盘会: 14:40,用户 A:"我刚下的订单,列表里怎么找不到?刷新也没用。" 14:48,用户 B(内测商家):"你们后台给我的报表是三个月前的吧?我上周的销量呢?" 排查结果比投诉更扎心:订单从库延迟 3 小时 12 分钟(用户 A 的问题),而排查时顺手做的全量巡检还揪出一个更吓人的——报表归档从库的复制位点停在三个月前(用户 B 的问题),期间没有任何告警,因为监控清单里压根没有这台"冷从库"。 根因不在什么高深的东西:14:02 一个定时任务发了单个 50 万行的大事务 UPDATE,主库 6 分钟执行完,从库却要整事务串行回放 42 分钟——在这 42 分钟里,这个事务之后的所有 binlog 都只能排队,单线程回放的从库被彻底堵死。更早的 1 个半小时积压叠上去,就是 3 小时 12 分钟的账。 这篇文章按真实排查顺序展开:事故还原 → 复制原理补课(延迟是架构属性不是故障)→ Seconds_Behind_Master 的读法与三个坑 → 定位大事务 → 三重修复(大事务拆小 + 并行复制 + 关....