MySQL主从复制断开后不会自动持续重连,默认仅首次尝试;需调小slave_net_timeout(建议10~30秒)并重启IO线程,配合MASTER_CONNECT_RETRY和MASTER_RETRY_COUNT参数及监控才能实现快速、可靠重连。主从复制断开后,MySQL 会不会自动重连会,但默认行为非常保守:只在 CHANGE MASTER TO 后首次启动时尝试一次连接,失败就停在 Slave_IO_Running: No,不会持续重试。真正起作用的是 MASTER_RETRY_COUNT 和 MASTER_CONNECT_RETRY 这两个参数,它们控制 IO 线程在连接失败后的重试逻辑,但很多人误以为只要开了 relay_log_recovery=ON 或启用了 GTID 就能"自动恢复",其实不是。MASTER_RETRY_COUNT 默认是 86400(24 小时),但这个值只有在连接被明确拒绝(比如端口不通、认证失败)时才生效;如果网络只是暂时中断(TCP 连接已建立但后续包丢弃),MySQL 可能卡在 "reading event" 状态,根本不会触发重试逻辑MASTER_CONNECT_RETRY 默认是 60 秒,即每次重试前等待的时间,不是超时时间------连接建立超时由 slave_net_timeout 控制,它默认是 3600 秒(1 小时),这才是导致"断了等很久才重连"的元凶GTID 模式下,即使重连成功,如果主库的 binlog 已被清理,从库仍会报错 Could not find first log file name in binary log index file,此时光靠重试没用,得人工干预如何让 IO 线程更快感知并重连核心是缩短 slave_net_timeout,它决定了 IO 线程在收不到主库数据时,多久判定为"网络异常"并主动断开当前连接、进入重试流程。这个参数必须在从库上动态设置,并重启 IO 线程才生效:SET GLOBAL slave_net_timeout = 30;STOP SLAVE IO_THREAD;START SLAVE IO_THREAD;设太小(如 5)可能导致误判:主库写入空闲期稍长就会频繁断连重试,增加握手开销设太大(如默认 3600)会导致抖动后长达一小时无响应,复制延迟飙升且不报警生产建议值:10~30 秒,配合监控(比如定期查 Seconds_Behind_Master 和 Slave_IO_Running)可平衡灵敏度与稳定性重连失败后,错误日志里常见但容易忽略的关键线索别只盯着 ERROR 2003 (HY000) 这类连接拒绝错误。网络抖动更常表现为: AI Code Reviewer AI自动审核代码
相关推荐
金銀銅鐵18 小时前
[Python] 从《千字文》中随机挑选汉字cup111 天前
[技术复盘] Windows Python 打包实战:Nuitka 环境踩坑总结与 CI 自动化构建全指南aqi001 天前
15天学会AI应用开发(七)有了大模型为什么还要引入RAG金銀銅鐵1 天前
用 Python 实现 Take-Away 游戏copyer_xyf1 天前
Agent 流程编排copyer_xyf1 天前
Agent RAGcopyer_xyf1 天前
【RAG】向量数据库:milvuscopyer_xyf1 天前
Agent 记忆管理星云穿梭2 天前
用Python写一个带图形界面的学生管理系统——完整教程