You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何自动终止MySQL非活跃连接?附MySQL连接学习操作步骤

MySQL连接管理实操与非活跃连接自动终止方案

我最近在深挖MySQL连接相关的知识点,做了一些实操尝试,同时也研究了自动终止非活跃连接的方法,整理出来和大家分享:

已执行的操作步骤

  • 多次调用服务器API后,我查询了当前MySQL的最大使用连接数,验证连接负载情况:
mysql> SHOW STATUS WHERE variable_name = 'Max_used_connections';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Max_used_connections | 15    |
+----------------------+-------+
1 row in set (0.00 sec)
  • 停止服务器API调用后,我给MySQL设置了两条全局超时规则(这里补充完整wait_timeout的设置示例):
SET GLOBAL interactive_timeout = 120;
SET GLOBAL wait_timeout = 120;

如何自动终止MySQL非活跃连接

要自动清理闲置的非活跃连接,核心是利用MySQL自带的两个超时参数,下面详细说下用法:

核心参数说明

  • interactive_timeout:针对交互式连接(比如用MySQL客户端手动登录的连接),当连接处于非活跃状态超过设置的时间后,MySQL会自动断开它。
  • wait_timeout:针对非交互式连接(比如应用程序通过JDBC/ODBC建立的连接),同样是超时后自动回收闲置连接。

实操注意事项

  1. 临时生效与永久生效
    • SET GLOBAL命令设置的参数,MySQL重启后会重置为默认值。如果要永久生效,需要修改MySQL的配置文件:
      • Linux系统一般是/etc/my.cnf/etc/mysql/my.cnf
      • Windows系统是my.ini
        [mysqld]节点下添加或修改:
      [mysqld]
      interactive_timeout = 120
      wait_timeout = 120
      
      保存后重启MySQL服务即可永久生效。
  2. 参数值合理调整
    • 超时时间不要设置过短,避免正常业务连接被误断开;也不要太长,防止大量闲置连接占用服务器资源。比如Web应用场景可以设置为120秒(2分钟),后台定时任务类的连接可以适当延长。
  3. 查看当前参数状态
    可以用这条命令快速查看所有超时相关的配置:
    SHOW VARIABLES LIKE '%timeout%';
    

另外要注意,如果你的应用使用了连接池(比如Druid、HikariCP),连接池本身也有自己的连接超时管理机制,需要和MySQL的这两个参数配合调整,避免出现连接失效的问题。

内容的提问来源于stack exchange,提问作者impossible

火山引擎 最新活动