使用SHOW SLAVE STATUS查看Seconds_Behind_Master可直接获取从库延迟秒数,结合Slave_IO_Running和Slave_SQL_Running判断复制状态;2. GTID模式下通过比较主从gtid_executed集合差异判断延迟;3. MySQL 5.7+可用performance_schema.replication_applier_status_by_worker监控多线程复制延迟;4. 自定义心跳表通过时间戳差值精确测量实际延迟。优先使用Seconds_Behind_Maste
在 MySQL 主从复制环境中,查看复制延迟是监控数据同步状态的重要环节。可以通过以下几种方式来判断从库的延迟情况。
SHOW SLAVE STATUS\G
重点关注以下字段:
os:从库当前读取的主库 binlog 位置。当 Slave_IO_Running 或 Slave_SQL_Running 为 No 时,Seconds_Behind_Master 可能显示为 NULL。另外,如果主从之间网络中断或从库停止复制,该值可能不准确。
主库上执行:
SELECT @@GLOBAL.gtid_executed;
从库上执行:
SELECT @@GLOBAL.gtid_executed;
SELECT * FROM performance_schema.replication_applier_status_by_worker;
可以查看每个 SQL 线程的工作进度和延迟情况,适用于多线程复制环境。CREATE TABLE heartbeat (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
INSERT INTO heartbeat VALUES ();
SELECT UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(ts) AS delay FROM heartbeat;
这种方法不受复制线程状态影响,能更真实反映业务数据延迟。基本上就这些常用方法。日常运维中,优先看 Seconds_Behind_Master,结合 GTID 或心跳表做补充验证,能更准确掌握复制延迟状态。