设为首页收藏本站

IT技术擎 - 最棒的IT web技术交流社区

 找回密码
 注册为IT技术擎人

QQ登录

只需一步,快速开始

搜索
热搜: php h5 jquery
查看: 9|回复: 0

[mysql] MySQL中interactive_timeout和wait_timeout的区别

[复制链接]

1万

主题

1万

帖子

5万

积分

版主

Rank: 7Rank: 7Rank: 7

积分
53923
发表于 4 天前 | 显示全部楼层 |阅读模式
在用mysql客户端对数据库进行操作时,打开终端窗口,如果一段时间没有操作,再次操作时,常常会报如下错误:
  1. ERROR 2013 (HY000): Lost connection to MySQL server during query
复制代码
  1. ERROR 2006(HY000): MySQL server has gone away
  2. No connection. Trying to reconnect...
复制代码

这个报错信息就意味着当前的连接已经断开,需要重新建立连接。
那么,连接的时长是如何确认的?
其实,这个与interactive_timeout和wait_timeout的设置有关。
首先,看看官方文档对于这两个参数的定义
interactive_timeout
默认是28800,单位秒,即8个小时
  1. The number of seconds the server waits for activity on an interactive connection before closing it. An interactive client is defined as a client that uses the CLIENT_INTERACTIVE option to mysql_real_connect(). See also wait_timeout.
复制代码

wait_timeout
默认同样是28800s
  1. The number of seconds the server waits foractivity on a noninteractive connection before closing it.On thread startup, the session wait_timeout value is initialized from the global wait_timeout value or from the global interactive_timeout value, depending on the type of client (as defined by the CLIENT_INTERACTIVE connect option to mysql_real_connect()). See also interactive_timeout.
复制代码

根据上述定义,两者的区别显而易见
1 >interactive_timeout针对交互式连接,wait_timeout针对非交互式连接。所谓的交互式连接,即在mysql_real_connect()函数中使用了CLIENT_INTERACTIVE选项。
说得直白一点,通过mysql客户端连接数据库是交互式连接,通过jdbc连接数据库是非交互式连接。
2 > 在连接启动的时候,根据连接的类型,来确认会话变量wait_timeout的值是继承于全局变量wait_timeout,还是interactive_timeout。
下面来测试一下,确认如下问题
1. 控制连接最大空闲时长的是哪个参数。
2. 会话变量wait_timeout的继承问题 Q1:控制连接最大空闲时长的是哪个参数
A1:wait_timeout
验证
只修改wait_timeout参数
  1. mysql > select variable_name,variable_value from information_schema.session_variables where variable_name in ('interactive_timeout','wait_timeout');
  2. +---------------------+----------------+
  3. | variable_name | variable_value |
  4. +---------------------+----------------+
  5. | INTERACTIVE_TIMEOUT | 28800 |
  6. | WAIT_TIMEOUT | 28800 |
  7. +---------------------+----------------+
  8. 2 rows in set (0.03sec)mysql > set session WAIT_TIMEOUT=10;
  9. Query OK, 0 rows affected (0.00sec)
  10. -------等待10s后再执行
  11. mysql > select variable_name,variable_value from information_schema.session_variables where variable_name in ('interactive_timeout','wait_timeout');
  12. ERROR 2013 (HY000): Lost connection to MySQL server during query
复制代码
可以看到,等待10s后再执行操作,连接已经断开。 只修改interactive_timeout参数
  1. mysql > select variable_name,variable_value from information_schema.session_variables where variable_name in ('interactive_timeout','wait_timeout');
  2. +---------------------+----------------+
  3. | variable_name | variable_value |
  4. +---------------------+----------------+
  5. | INTERACTIVE_TIMEOUT | 28800 |
  6. | WAIT_TIMEOUT | 28800 |
  7. +---------------------+----------------+
  8. 2 rows in set (0.06sec)mysql > set session INTERACTIVE_TIMEOUT=10;
  9. Query OK, 0 rows affected (0.00sec) ----------等待10s后执行
  10. mysql > select variable_name,variable_value from information_schema.session_variables where variable_name in ('interactive_timeout','wait_timeout');
  11. +---------------------+----------------+
  12. | variable_name | variable_value |
  13. +---------------------+----------------+
  14. | INTERACTIVE_TIMEOUT | 10 |
  15. | WAIT_TIMEOUT | 28800 |
  16. +---------------------+----------------+
  17. 2 rows in set (0.06 sec)
复制代码

Q2:会话变量wait_timeout的继承问题
A2:如果是交互式连接,则继承全局变量interactive_timeout的值,如果是非交互式连接,则继承全局变量wait_timeout的值。



上一篇:gnome extensions 推荐 (fedora 28 常用gnome 插件备份)
下一篇:RHEL6.5 DHCP服务器搭建
该用户未在地球留下任何的痕迹

本版积分规则

QQ|小黑屋|帮助|IT技术擎 ( 沪ICP备15054863号  

GMT+8, 2018-9-19 01:30

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表