复制心跳检测是MySQL主从间维持连接活跃的机制,通过主库定期向从库发送心跳包实现;该功能由MASTER_HEARTBEAT_PERIOD参数控制,单位为秒,可在CHANGE MASTER TO语句中设置;建议值为1~10秒,需小于slave_net_timeout且通常设为其1/2到2/3,过高或过低均影响稳定性;查看配置可通过SHOW SLAVE STATUS\G中的Master_Heartbeat_Period字段;修改需重启复制链路,合理设置可提升低频写入场景下的复制可靠性。

在MySQL主从复制中,心跳检测机制用于保持主从连接活跃,特别是在没有写操作时也能让从库知道主库仍在线。这个功能通过 MASTER_HEARTBEAT_PERIOD 参数设置,属于复制连接的一部分。
什么是复制心跳检测?
MySQL复制基于二进制日志(binlog),当主库长时间没有更新时,从库可能无法及时感知主库状态,容易误判为网络中断。心跳包由主库定期发送到从库,维持连接活跃,避免不必要的重连和延迟判断。
如何设置心跳周期
心跳周期在配置CHANGE MASTER TO语句时指定,单位是秒,支持小数(如0.5):
CHANGE MASTER TO MASTER_HEARTBEAT_PERIOD = 5, MASTER_HOST='master_host', MASTER_USER='repl', ...;上面例子表示每5秒发送一次心跳包。
常见设置建议:
- 一般设为1~10秒,太短会增加网络开销,太长失去检测意义
- 如果网络稳定且负载高,可适当延长至10秒
- 对延迟敏感的场景,可设为1~2秒
查看当前心跳设置
可通过以下命令查看从库的心跳周期配置:
SHOW SLAVE STATUS\G关注字段:
- Master_Host:主库地址
- Master_Heartbeat_Period:实际心跳间隔(秒)
- Last_IO_Error:若心跳超时导致断开,会记录错误
自动管理与注意事项
MySQL默认不开启显式心跳(即值为0),但IO线程仍有一定保活机制。建议手动设置一个合理值以增强稳定性。
注意点:
- 心跳周期不能大于主库的 slave_net_timeout 值,否则从库会误判主库宕机
- 推荐设置:MASTER_HEARTBEAT_PERIOD 为 slave_net_timeout 的 1/2 到 2/3
- 修改心跳需重启复制链路(先STOP SLAVE,再CHANGE,最后START SLAVE)
基本上就这些。合理配置心跳能提升主从复制的健壮性,尤其在低频写入场景下尤为重要。










