MySQL中wait_timeout与interactive_timeout详解

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL中wait_timeout与interactive_timeout详解

【1】分别是什么

① interactive_timeout


20180605175735860.jpg


MySQL服务器关闭交互式连接前等待的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。参数默认值:28800秒(8小时)


② wait_timeout

MySQL服务器关闭非交互连接之前等待的秒数。在会话启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型–由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义。参数默认值:28800秒(8小时)。


什么是交互连接,什么是非交互连接?

通过MySQL 客户端连接数据库的是交互会话,通过jdbc等程序连接数据库的是非交互会话。


【2】继承关系

① 单独修改全局interactive_timeout

set GLOBAL interactive_timeout=1000;


分别查看全局、会话变量值:

show GLOBAL VARIABLES like '%timeout%';
show  VARIABLES like '%timeout%';

分析如下:

在交互模式下,session和global级别的 interactive_timeout 继承了 interactive_timeout global的值。而 wait_timeout 的值,session级别继承了interactive_timeout。global级别的wait_timeout 则不受影响 。


② 设置session级别的interactive_timeout

set interactive_timeout = 1100;


分析如下:

无论全局还是会话级别的wait_timeout值并不受session级别的interactive_timeout的值的影响。


③ 同时设置全局值,且不同

set GLOBAL interactive_timeout = 1300;
set GLOBAL wait_timeout = 1400;


查看全局变量值:

show GLOBAL VARIABLES like '%timeout%';


20180605182157920.jpg


查看会话变量值:

show  VARIABLES like '%timeout%';


20180605182231811.jpg

分析如下:

session级别的wait_timeout 继承global 级别的 interactive_timeout 的值。 global级别的wait_timeout 则不受影响。在没有改变 interactive_timeout的值的情况下,去修改wait_timeout的值, 结果无效。


如上是交互式连接测试下结果:交互式连接的wait_timeout 继承于global的interactive_timeout。


而非交互是连接结果如下:非交互式连接的wait_timeout继承于global的wait_timeout。

【3】项目异常与值设置

项目使用程序连接数据库,那么就属于非交互连接了,就需要着重考虑如何设置wait_timeout值。


常见问题如下:


① The last packet successfully received from the server was 23,579 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.

Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.


② MySQL server has gone away

值设置


wait_timeout默认值为28800,大小需要根据项目来定。

wait_timeout过大有弊端,其体现就是MySQL里大量的SLEEP进程无法及时释放。

过小容易遇到MySQL server has gone away ,死锁等待等问题。


【4】总结


控制连接最大空闲时长的wait_timeout参数。

对于非交互式连接,类似于jdbc连接,wait_timeout的值继承自服务器端全局变量wait_timeout。

对于交互式连接,类似于mysql客户单连接,wait_timeout的值继承自服务器端全局变量interactive_timeout。

判断一个连接的空闲时间,可通过show processlist输出中Sleep状态的时间。

超时时间只对非活动状态的connection进行计算。

超时时间只以session级别的wait_timeout 为超时依据,global级别只决定session初始化时的超时默认值。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
SQL 网络协议 关系型数据库
mysql 连接超时wait_timeout问题解决
com.mysql.jdbc.CommunicationsException: The last packet successfully received from the server was58129 seconds ago.The last packet sent successfully to the server was 58129 seconds ago, which is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or tes
|
5月前
|
关系型数据库 MySQL Linux
mysql 设置wait_timeout连接等待时间
mysql 设置wait_timeout连接等待时间
1321 0
|
SQL druid 关系型数据库
MySQL连接超时时间wait_timeout导致间歇性报错:communication link failure
MySQL连接超时时间wait_timeout导致间歇性报错:communication link failure
786 1
|
关系型数据库 MySQL
【MySQL】wait_timeout=120,是干什么的?底层原理是什么?
【MySQL】wait_timeout=120,是干什么的?底层原理是什么?
714 0
|
关系型数据库 MySQL 数据库连接
【MySQL】interactive_timeout=120,是干什么的?底层原理是什么?
【MySQL】interactive_timeout=120,是干什么的?底层原理是什么?
162 0
|
关系型数据库 MySQL Java
Could not open Hibernate Session for transaction; nested exception is org.hibernate.TransactionExcep linux下mysql修改连接超时wait_timeout修改后就ok了
Could not open Hibernate Session for transaction; nested exception is org.hibernate.TransactionExcep linux下mysql修改连接超时wait_timeout修改后就ok了
183 1
|
关系型数据库 MySQL
mysql查看或修改wait_timeout值
mysql查看或修改wait_timeout值
1006 0
|
网络协议 关系型数据库 MySQL
mysql超经典的8小时问题-wait_timeout
mysql超经典的8小时问题-wait_timeout
605 0
|
SQL Oracle 关系型数据库
MySQL:参数wait_timeout和interactive_timeout以及空闲超时的实现
水平有限,如果有误请指出源码版本:percona 5.7.22 一、参数意思 这里简单解释一下两个参数含义如下: interactive_timeout:The number of seconds the server waits for activity on an interactive .
2154 0
|
7天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
23 1