怎么判断主从延迟?

第一种:Seconds_Behind_Master

一种常规的方法就是 show slave status 查看 Seconds_Behind_Master,这个参数表示从库延迟的秒数。

如果是0,表示可能没有延迟。这里为什么是可能呢?

当从库正在主动处理更新时,此字段显示从库上的当前时间戳与从库上当前正在处理的事件的主库上记录的原始时间戳之间的差异。

当副本上当前没有处理任何事件时,该值为 0

在某些情况下,Seconds_Behind_Master 并不一定准确。比如网络中断时,Seconds_Behind_Master = 0 ,并不能代表主从无延迟。

因此,有比这个更准确的一种方法:对比位点或 GTID。

第二种:对比位点

如果是基于位点的复制,则判断 Master_Log_File 跟 Relay_Master_Log_File 是否相等,如果 Relay_Master_Log_File 落后 Master_Log_File,则表示主从存在延迟。

其中

Master_Log_File 表示 IO 线程正在读取的主库 binlog 文件名

Relay_Master_Log_File 表示SQL 线程最近执行的事务对应的主库 binlog 文件名

或者判断 Read_Master_Log_Pos 跟 Exec_Master_Log_Pos 是否相等,如果后者落后前者很多,则表示延迟比较高。

其中

Read_Master_Log_Pos 表示IO 线程正在读取的主库 binlog 文件中的位点

Exec_Master_Log_Pos 表示 SQL 线程最近读取和执行的事务对应的主库 binlog 文件中的位点

第三种:对比GTID

如果开启了 GTID 复制,则可以对比 Retrieved_Gtid_Set 和 Executed_Gtid_Set 是否相等,如果 Executed_Gtid_Set 落后很多,则表示存在延迟。

其中

Retrieved_Gtid_Set:从库收到的所有日志的 GTID 集合;

Executed_Gtid_Set:从库已经执行完的 GTID 集合。