MySQL复制延迟是主从架构中常见的问题,可能影响数据一致性和系统可靠性。要排查复制延迟,需从多个维度分析主从状态、网络、SQL执行效率和配置合理性。
检查复制线程状态
查看从库的复制线程是否正常运行:
SHOW SLAVE STATUS\G:重点关注Slave_IO_Running和
Slave_SQL_Running是否为Yes,以及
Seconds_Behind_Master值是否持续增长。 若
Seconds_Behind_Master为NULL,说明复制中断;若值很大,说明从库处理速度跟不上主库。 观察
Last_Error和
Last_SQL_Errno,判断是否有错误导致SQL线程卡住。
分析主从日志差异
通过对比主从binlog和relay log,定位延迟源头:
在主库执行SHOW MASTER STATUS;,记录当前binlog文件名和位置。 在从库执行
SHOW SLAVE STATUS\G,查看
Master_Log_File和
Read_Master_Log_Pos,确认IO线程是否已拉取最新日志。 再看
Relay_Master_Log_File和
Exec_Master_Log_Pos,判断SQL线程执行进度。 若IO线程位置远超SQL线程,说明日志应用慢,问题出在从库SQL处理环节。
排查从库SQL执行性能
SQL线程单线程回放(默认情况下)可能成为瓶颈:
检查是否有大事务或长时间运行的语句阻塞复制,如ALTER TABLE、大批量DELETE。 使用SHOW PROCESSLIST;查看SQL线程状态,常见状态有
Reading event from the relay log、
Updating等。 开启
slow_query_log,确认重放的SQL是否进入慢查询日志。 考虑启用并行复制(如
slave_parallel_workers > 0),提升应用速度,支持库级或逻辑时钟并行。
检查系统与网络因素
外部环境也可能导致延迟:
主从之间网络延迟高或带宽不足,导致binlog传输慢,可用ping或traceroute检测。 从库机器负载过高(CPU、IO、内存),影响SQL应用速度,用top、iostat等工具分析。 磁盘写入慢,特别是relay log和InnoDB写入性能差,建议使用SSD并合理配置innodb_flush_log_at_trx_commit。基本上就这些。从复制状态入手,逐步排查日志同步、SQL执行和系统资源,能快速定位MySQL复制延迟的根本原因。关键是结合
SHOW SLAVE STATUS输出和系统监控信息综合判断。不复杂但容易忽略细节。
