客户反馈在一个数据量较大的MySQL主从复制环境中,主从同步突然中断,导致数据不一致。经过排查,发现是由于 max_connection_errors 参数设置不当,导致从库连接主库时因错误次数过多被阻塞。
主库执行
SHOW SLAVE HOSTS;
结果显示中不包含从库信息,初步判断主从连接已断开。
从库执行
SHOW SLAVE STATUS\G;
IO线程状态持续为
Connecting
,无法正常连接到主库。常见原因包括:
– 连接信息错误
– 网络故障
– 防火墙拦截
– 连接数达到上限
查看MySQL错误日志
日志中出现以下关键错误:
ERROR 1129: Host 'xxx.xxx.xxx.xxx' is blocked because of many connection errors;
unblock with 'mysqladmin flush-hosts'
测试从库连接主库
使用复制账户远程连接主库时,同样报错
ERROR 1129
,确认连接被阻塞。
检查连接相关参数
执行
SHOW VARIABLES LIKE '%max_connection%';
,发现
max_connection_errors
值较低,导致错误连接积累后触发阻塞机制。
MySQL的
max_connection_errors
参数用于控制同一主机在连接过程中允许的错误次数。若错误连接次数超过该值,MySQL会主动阻塞该主机的连接请求,从而避免潜在的安全或性能问题。
在本案例中,从库因网络波动或瞬时负载问题频繁连接失败,错误计数累积超过阈值,导致主库将来从库的IP加入阻塞列表。
STOP SLAVE;
SHOW VARIABLES LIKE '%max_connection%';
重点关注:
• max_connection_errors
• max_connections
SET GLOBAL max_connect_errors = 10000; SET GLOBAL max_connections = 1000;
注:如需永 久生效,需在 my.cnf 配置文件中修改并重启MySQL。
在主库和从库上分别执行:
mysqladmin flush-hosts -uroot -p密码
该命令会清空 host_cache 表,解除因连接错误被阻塞的主机。
START SLAVE; SHOW SLAVE STATUS\G;
确认 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes ,且无延迟报错。
合理设置参数
根据实际业务场景调整
max_connection_errors
,避免因短暂网络问题导致阻塞。
监控连接错误
定期检查
Host_cache
表与MySQL错误日志,及时发现异常连接。
网络稳定性保障
确保主从服务器之间的网络稳定,减少连接超时或中断。
定期维护
可编写脚本定时执行
FLUSH HOSTS
,预防未知阻塞。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29956245/viewspace-3117233/ ,如需转载,请注明出处,否则将追究法律责任。