如何配置mysql连接超时参数_mysql连接超时配置方法

来源:这里教程网 时间:2026-02-28 20:43:37 作者:

MySQL 连接超时主要由服务端和客户端两方面参数共同控制,单独改一边可能无效。关键是要区分“连接建立阶段超时”和“连接建立后空闲超时”,两者对应不同参数。

服务端:控制已建立连接的空闲等待时间

这是最常配置的超时项,指连接成功后,如果客户端长时间不发任何请求,MySQL 服务端主动断开该连接的时间。

wait_timeout:影响非交互式连接(如应用连接池、脚本连接),单位秒,默认通常为 28800(8 小时) interactive_timeout:影响交互式连接(如 mysql 命令行客户端),单位秒,默认也常为 28800

修改方式(需有 SUPER 权限):

SET GLOBAL wait_timeout = 300; // 设为 5 分钟
SET GLOBAL interactive_timeout = 300;

⚠️ 注意:该设置仅对新建立的连接生效;已存在的连接仍按旧值计时。如需持久化,需写入 MySQL 配置文件 my.cnfmy.ini[mysqld] 段:

[mysqld]
wait_timeout = 300
interactive_timeout = 300

客户端:控制连接建立过程的等待上限

这是连接刚发起时,客户端等待服务端响应的最大时间,超时则报 “Connection refused” 或 “Lost connection” 类错误。

Java JDBC:在连接 URL 后加 ?connectTimeout=5000&socketTimeout=30000(单位毫秒)
connectTimeout 控制 TCP 握手+认证阶段;socketTimeout 控制单次 SQL 执行等待结果的超时(非连接空闲)
Python PyMySQL:构造连接时传参 connect_timeout=5, read_timeout=30 PHP mysqli:调用 mysqli_options($conn, MYSQLI_OPT_CONNECT_TIMEOUT, 5)

连接池场景必须同步调整的参数

若使用 HikariCP、Druid、DBCP 等连接池,光改 MySQL 服务端 wait_timeout 不够——连接池可能持有已超时的连接,下次取出时直接报错。

将连接池的 maxLifetime 设为略小于 MySQL 的 wait_timeout(例如 MySQL 设 300 秒,连接池设 280 秒) 开启连接有效性验证,如 HikariCP 的 connection-test-query=SELECT 1validation-timeout 启用 test-on-borrow(借出前检测)或更轻量的 test-while-idle(空闲时检测)

如何验证当前连接超时设置是否生效

登录 MySQL 后执行:

SHOW VARIABLES LIKE '%timeout%';
重点关注 wait_timeoutinteractive_timeoutconnect_timeout(后者是服务端接受连接握手的超时,一般无需改动)

查看当前活跃连接及其已空闲时间:

SELECT id, user, host, db, command, time, state FROM information_schema.processlist WHERE command != 'Sleep' OR time > 60;

其中 time 列即该连接空闲秒数,可用于判断是否接近超时阈值。

相关推荐