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

9次阅读

mysql连接超时由服务端和客户端参数共同控制,需区分连接建立阶段与建立后空闲超时:服务端wait_timeout和interactive_timeout控制空闲超时,默认28800秒,需GLOBAL设置并写入my.cnf;客户端如JDBC需配置connectTimeout和socketTimeout;连接池须同步调整maxLifetime并启用有效性验证。

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

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 列即该连接空闲秒数,可用于判断是否接近超时阈值。

text=ZqhQzanResources