MySQL连接超时需合理配置wait_timeout、interactive_timeout、connect_timeout和net_read_timeout等参数,生产环境建议将前两者设为600~1800秒,避免空闲连接占用资源;connect_timeout可调至10~15秒以应对握手失败,net_read_timeout设为60~300秒适应慢查询或网络延迟;应用层应使用连接池并设置maxLifetime略小于wait_timeout,启用连接验证机制,确保连接有效性,结合数据库与应用层优化可有效防止连接堆积与资源浪费。

MySQL连接超时是常见问题,尤其在高并发或网络不稳定的场景下。合理配置超时参数能有效避免资源浪费和连接堆积。核心参数包括wait_timeout、interactive_timeout、connect_timeout和net_read_timeout等,它们分别控制不同阶段的超时行为。
设置非交互与交互式连接的空闲超时
wait_timeout 控制普通连接在无操作后的最大空闲时间,interactive_timeout 针对交互式客户端(如命令行)。两者默认值通常为28800秒(8小时),可根据实际需求调低。
[mysqld] wait_timeout = 600 interactive_timeout = 600
调整连接建立与数据读取超时
connect_timeout 决定MySQL服务器等待客户端握手完成的时间,net_read_timeout 控制服务器从客户端读取数据的超时。网络较差时适当增加可减少失败率。
- 若应用频繁出现“Lost connection during handshake”,可将 connect_timeout 从默认5秒提升至10~15秒
- 大查询或慢网络下,net_read_timeout 可设为60~300秒
- 配置示例:
SET GLOBAL connect_timeout = 10; SET GLOBAL net_read_timeout = 60;
同样,加入 my.cnf 以持久化设置。
优化应用端连接池与主动检测
仅调整数据库参数不够,应用层也需配合。使用连接池(如HikariCP、Druid)时,应设置合理的最大空闲时间和连接验证机制。
- 启用 testOnBorrow 或 testWhileIdle,确保获取的连接有效
- 设置 maxLifetime 略小于 wait_timeout,避免使用被服务端关闭的连接
- 例如:wait_timeout=600,则连接池 maxLifetime 建议设为540秒
基本上就这些。关键不是参数多复杂,而是理解每个超时的触发场景,并结合应用特点做匹配。定期检查 SHOW PROCESSLIST; 中的睡眠连接数,也能帮助判断配置是否合理。










