interactive_timeout 控制交互式连接的空闲超时,如命令行客户端(mysql -u root -p)、MySQL Shell、Workbench 等人工操作会话;不控制 JDBC、PyMySQL 等应用连接,后者由 wait_timeout 控制。

interactive_timeout 控制什么连接?
interactive_timeout 只影响交互式连接,比如你用 mysql -u root -p 命令行登录、MySQL Shell、MySQL Workbench 这类人工操作的会话。它不控制 JDBC、PyMySQL、Node.js mysql2 这些应用连接——那些走的是 wait_timeout。
如果你发现「自己刚连上数据库,几分钟不动就断开了」,大概率是这个参数设得太小;但如果是 Spring Boot 应用隔几分钟报 Connection reset 或 Lost connection to MySQL server during query,那基本和 interactive_timeout 无关,得看 wait_timeout 和客户端配置。
怎么改 interactive_timeout?临时 vs 永久
临时修改(重启后失效):
SET GLOBAL interactive_timeout = 600;
注意:需要 SUPER 或 SYSTEM_VARIABLES_ADMIN 权限;只对之后新建的交互式连接生效,不影响已存在的会话。
-
永久修改(推荐生产环境用):
编辑 MySQL 配置文件(Linux 下通常是 /etc/my.cnf 或 /etc/mysql/my.cnf,Windows 是 my.ini),在 [mysqld] 段落下添加:
[mysqld]
interactive_timeout = 600
wait_timeout = 600
⚠️ 必须同时设 wait_timeout,否则两者不一致会导致奇怪行为(比如命令行连着,但同一账号的应用连接被提前踢掉)。
为什么单独调大 interactive_timeout 往往没用?
- 客户端工具(如 MySQL Workbench)可能自带心跳或重连逻辑,根本等不到服务端超时;
- 大多数终端 SSH 会话本身有空闲断开设置(如
ClientAliveInterval),比 MySQL 层更早切断;
- 如果你用的是云数据库(如阿里云 RDS、腾讯云 CDB),
interactive_timeout 可能被平台限制无法修改,或者修改后不生效——这类环境通常强制使用连接池代理,真实超时由中间件控制。
临时修改(重启后失效):SET GLOBAL interactive_timeout = 600;
注意:需要 SUPER 或 SYSTEM_VARIABLES_ADMIN 权限;只对之后新建的交互式连接生效,不影响已存在的会话。
永久修改(推荐生产环境用):
编辑 MySQL 配置文件(Linux 下通常是 /etc/my.cnf 或 /etc/mysql/my.cnf,Windows 是 my.ini),在 [mysqld] 段落下添加:
[mysqld] interactive_timeout = 600 wait_timeout = 600⚠️ 必须同时设
wait_timeout,否则两者不一致会导致奇怪行为(比如命令行连着,但同一账号的应用连接被提前踢掉)。
- 客户端工具(如 MySQL Workbench)可能自带心跳或重连逻辑,根本等不到服务端超时;
- 大多数终端 SSH 会话本身有空闲断开设置(如
ClientAliveInterval),比 MySQL 层更早切断; - 如果你用的是云数据库(如阿里云 RDS、腾讯云 CDB),
interactive_timeout可能被平台限制无法修改,或者修改后不生效——这类环境通常强制使用连接池代理,真实超时由中间件控制。
验证是否生效:
登录后执行 SHOW VARIABLES LIKE 'interactive_timeout';,确认返回值是你设的数字;再新开一个命令行连接,不输入任何命令,等时间过去看是否自动退出。
容易被忽略的关键点
-
interactive_timeout 和 wait_timeout 的单位都是秒,不是毫秒,别错写成 60000 当 10 分钟;
- 修改配置文件后必须重启 MySQL 服务(
systemctl restart mysqld 或 net stop mysql80 && net start mysql80),光 reload 不行;
- 即使设了 600 秒,如果客户端网络中间有 NAT、防火墙或负载均衡器,它们自身的连接空闲超时(常见 300 秒)会先斩断 TCP 连接,MySQL 根本来不及触发超时逻辑;
- 在 Docker 或 Kubernetes 环境中,MySQL 容器的配置文件可能被挂载覆盖,
my.cnf 位置、权限、生效顺序要逐层确认。
interactive_timeout 和 wait_timeout 的单位都是秒,不是毫秒,别错写成 60000 当 10 分钟;systemctl restart mysqld 或 net stop mysql80 && net start mysql80),光 reload 不行;my.cnf 位置、权限、生效顺序要逐层确认。


















