MySQL连接超时由服务端和客户端参数共同控制,需区分连接建立阶段与建立后空闲超时:服务端wait_timeout和interactive_timeout控制空闲超时,默认28800秒,需GLOBAL设置并写入my.cnf;客户端如JDBC需配置connectTimeout和socketTimeout;连接池须同步调整maxLifetime并启用有效性验证。
MySQL 连接超时主要由服务端和客户端两方面参数共同控制,单独改一边可能无效。关键是要区分“连接建立阶段超时”和“连接建立后空闲超时”,两者对应不同参数。
这是最常配置的超时项,指连接成功后,如果客户端长时间不发任何请求,MySQL 服务端主动断开该连接的时间。
修改方式(需有 SUPER 权限):
SET GLOBAL wait_timeout = 300; // 设为 5 分钟
SET GLOBAL interactive_timeout = 300;
⚠️ 注意:该设置仅对新建立的连接生效;已存在的连接仍按旧值计时。如需持久化,需写入 MySQL 配置文件 my.cnf 或 my.ini 的 [mysqld] 段:
[mysqld]
wait_timeout = 300
interactive_timeout = 300
这是连接刚发起时,客户端等待服务端响应的最大时间,超时则报 “Connection refused” 或 “Lost connection” 类错误。
若使用 HikariCP、Druid、DBCP 等连接池,光改 MySQL 服务端 wait_timeout 不够——连接池可能持有已超时的连接,下次取出时直接报错。

登录 MySQL 后执行:
SHOW VARIABLES LIKE '%timeout%';
重点关注 wait_timeout、interactive_timeout、connect_timeout(后者是服务端接受连接握手的超时,一般无需改动)
查看当前活跃连接及其已空闲时间:
SELECT id, user, host, db, command, time, state FROM information_schema.processlist WHERE command != 'Sleep' OR time > 60;
其中 time 列即该连接空闲秒数,可用于判断是否接近超时阈值。