使用pt-heartbeat检测主从复制延迟
不要用SECONDS_BEHIND_MASTER 来衡量MYSQL 主备的延迟时间, 原因如下: A:备库 Seconds_behand_master值是通过将服务器当前的时间戳与二进制日志中的事件的时间戳对比得到的,所以只有在执行事件时才能报告延迟 B:如果备库复制线程没有运行,就会报延迟为 null C:一些错误,如主备的 max_allowed_packet不匹配或者网络不稳定时,可能中断复制或者停止复制线程,但 Seconds_behand_master将显示为 0而不是显示错误 D:即使备库线程正在运行,备库有时候可能无法计算延迟时,如果发生这种情况,备库会报 0或者 null E:一个较大的事务可能导致延迟波动,如:有一个事务更新数据长达一个小时,最后提交,这条更新将比它实际发生时间要晚一个小时才记录到二进制日志中,当备库执行这条语句时,会临时地报告备库延迟一个小时,然后很快又变回 0 F:如果分发主库落后了,并且其本身也有已经追赶上它的备库,备库的延迟将显示为 0,而事实上备库和源主库之间此时是有延迟的。 解决这些问题的办法是忽略这个值,并使用一些可以直接观察和衡量的方式来监控备库延迟,最好的解决办法是使用 heartbeat record,这是一个在主库上每秒更新一次的时间戳,为了计算延迟,可以直接用备库当前的时间戳减去心跳记录的值