MySQL主从同步延迟排查,大站点数据同步
大站点数据同步时,MySQL主从延迟是常见故障。
延迟会导致从库数据落后,影响读写分离和报表准确性。
本文从排查思路到优化配置,帮你定位延迟根源并恢复同步。
先确认延迟现象与影响范围
登录从库执行 SHOW SLAVE STATUS\G,关注 Seconds_Behind_Master 和 Slave_SQL_Running_State。
若该值持续大于0且不断增长,说明SQL线程追不上主库写入。
同时检查 Master_Log_File 和 Read_Master_Log_Pos 是否与主库一致,判断是网络延迟还是SQL执行慢。
结论:Seconds_Behind_Master 非零且持续增大,通常表示从库SQL线程执行速度低于主库写入速度。
定位延迟来源:主库、网络还是从库
- 主库写入压力:大事务或批量导入会产生大量binlog,导致从库单线程回放慢。用
SHOW PROCESSLIST查看主库是否有长事务。 - 网络带宽:跨机房同步时,检查
SHOW SLAVE STATUS中Master_Log_File与Read_Master_Log_Pos是否快速变化,若IO线程正常但SQL线程慢,则是从库执行瓶颈。 - 从库硬件:磁盘IO、CPU、内存不足会拖慢回放。用
iostat -x 1和top观察从库资源。
判断条件:若 Slave_IO_Running 为 Yes 且 Slave_SQL_Running 为 Yes,但延迟持续,优先检查从库磁盘IO和SQL线程状态。
大站点常用优化:开启并行复制
MySQL 5.7及以上支持基于组提交的并行复制。
在从库配置文件 my.cnf 的 [mysqld] 段添加:
slave_parallel_workers = 8
slave_parallel_type = LOGICAL_CLOCK
slave_preserve_commit_order = 1
重启从库或动态设置 STOP SLAVE; SET GLOBAL slave_parallel_workers=8; START SLAVE;。
并行度建议设为CPU核数的2-4倍,但需观察实际效果。
结论:开启并行复制可将从库回放能力提升数倍,但需确保从库CPU和磁盘IO充足。
避坑指南:这些操作会让延迟更严重
- 不要在主库执行大事务,尽量拆分成小批量。
- 避免从库承担额外查询压力,读写分离时从库只读。
- 不要随意重启从库SQL线程,可能造成重复执行。
- 若使用
MASTER_DELAY延迟复制,需确认是否为预期配置。
效果验证与长期监控
优化后再次执行 SHOW SLAVE STATUS\G,观察 Seconds_Behind_Master 是否归零。
建议部署监控工具如 pt-heartbeat 或 Prometheus+mysqld_exporter,实时跟踪延迟。
定期检查 Relay_Log_Space 和 Slave_SQL_Running_State,确保同步稳定。
判断条件:若延迟持续下降并稳定在0附近,说明优化生效;
若仍增长,需检查是否有未提交的大事务或从库硬件瓶颈。
常见疑问
问:从库延迟高,但主库压力不大,为什么?
答:可能是从库硬件差、单线程复制或存在长事务。检查从库磁盘IO和 SHOW PROCESSLIST 中是否有长时间运行的SQL。
问:Seconds_Behind_Master 为 NULL 是什么意思?
答:通常表示从库IO线程或SQL线程未运行,或主库binlog被删除导致无法同步。检查 Slave_IO_Running 和 Slave_SQL_Running 状态。
问:并行复制开启后延迟没改善,怎么办?
答:确认 slave_parallel_type 是否正确设置为 LOGICAL_CLOCK,并检查主库是否产生大量无法并行的事务(如DDL)。
排查MySQL主从同步延迟,核心是定位瓶颈在IO还是SQL线程。
大站点数据同步场景下,合理配置并行复制和监控是关键。
按本文步骤操作,可有效降低延迟风险。