master_heartbeat_period用于维持主从tcp连接并提升seconds_behind_master延迟估算及时性,单位秒,需change master to显式设置,推荐30~60。
MySQL 主从复制中 MASTER_HEARTBEAT_PERIOD 的实际作用
心跳机制不是用来“检测主库是否存活”的,而是让从库在主库无写入时仍能维持 TCP 连接不被中间网络设备(如防火墙、LB)断开,并为 Seconds_Behind_Master 提供更及时的延迟估算依据。
默认值为 0,即禁用心跳;启用后,主库会按周期向从库发送空事件(Heartbeat_log_event),该事件不写入 binlog 文件,但会更新从库的 Relay_Log_Pos 和 Exec_Master_Log_Pos。这意味着:即使主库长时间无写入,从库的 Seconds_Behind_Master 也不会卡在旧值上不动。
-
MASTER_HEARTBEAT_PERIOD单位是秒,推荐设为30~60,过短会增加网络开销,过长则延迟感知滞后 - 必须在
CHANGE MASTER TO时显式指定,运行中无法动态修改(需先STOP SLAVE再重配) - 仅对基于 GTID 或非 GTID 的传统复制生效,但对
binlog_format=STATEMENT下的某些函数(如NOW())无额外保障
判断真实复制延迟不能只看 Seconds_Behind_Master
这个字段在从库 SQL 线程空闲时可能显示 0,但实际 Relay Log 还没执行完;或在主库静默期长期卡在某个固定值,掩盖了 IO 线程拉取滞后的问题。
更可靠的组合判断方式: