判断MySQL主从延迟需综合多种方法:优先看Seconds_Behind_Master,但需注意其局限性;其次比对Master_Log_File/Read_Master_Log_Pos与Relay_Master_Log_File/Exec_Master_Log_Pos位点;GTID模式下可用GTID_SUBTRACT对比缺失事务;业务层通过心跳表计算端到端延迟最真实。
判断 MySQL 主从延迟,核心是对比主库写入时间与从库执行完成时间的差值。最直接有效的方式是通过 Seconds_Behind_Master 值,但该值有局限性,需结合其他指标交叉验证。
在从库执行 SHOW SLAVE STATUS\G,关注 Seconds_Behind_Master 字段:
⚠️ 注意:该值在以下情况会失真:
binlog 时间戳陈旧,而从库实际已追平仍用 SHOW SLAVE STATUS\G,提取四组关键位点:
若前两者与后两者完全一致(文件名相同、位置相同),说明从库已实时追上;若有差异,差值即为未执行的 binlog 字节数,可粗略估算延迟量。配合 mysqlbinlog 查看对应位置的 event 时间戳,能算出真实延迟秒数。
执行 SELECT @@global.gtid_executed; 分别在主库和从库运行:
SELECT GTID_SUBTRACT(@@global.gtid_executed_on_master, @@global.gtid_executed_on_slave); 可查出从库缺失的事务集合GTID 方式不受文件名/位置变更影响,逻辑清晰,适合自动化监控脚本使用。
在主库插入一条带当前时间戳的记录(例如:INSERT INTO heartbeat(ts) VALUES(NOW());),然后在从库持续查询该记录的 ts 值,计算当前时间与该值的差值:
不复杂但容易忽略。