zoukankan      html  css  js  c++  java
  • MySQL中interactive_timeout和wait_timeout的区别

     

    在用mysql客户端对数据库进行操作时,打开终端窗口,如果一段时间没有操作,再次操作时,常常会报如下错误:

    ERROR 2013 (HY000): Lost connection to MySQL server during query
    ERROR 2006 (HY000): MySQL server has gone away
    No connection. Trying to reconnect...

    这个报错信息就意味着当前的连接已经断开,需要重新建立连接。

    那么,连接的时长是如何确认的?

    其实,这个与interactive_timeout和wait_timeout的设置有关。

    首先,看看官方文档对于这两个参数的定义

    interactive_timeout

    默认是28800,单位秒,即8个小时

    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

    The number of seconds the server waits for activity 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参数

    复制代码
    mysql> select variable_name,variable_value from information_schema.session_variables where variable_name in ('interactive_timeout','wait_timeout');
    +---------------------+----------------+
    | variable_name       | variable_value |
    +---------------------+----------------+
    | INTERACTIVE_TIMEOUT | 28800          |
    | WAIT_TIMEOUT        | 28800          |
    +---------------------+----------------+
    2 rows in set (0.03 sec)
    
    mysql> set session WAIT_TIMEOUT=10;
    Query OK, 0 rows affected (0.00 sec)
    -------等待10s后再执行
    mysql> select variable_name,variable_value from information_schema.session_variables where variable_name in ('interactive_timeout','wait_timeout');
    ERROR 2013 (HY000): Lost connection to MySQL server during query
    复制代码

    可以看到,等待10s后再执行操作,连接已经断开。

    只修改interactive_timeout参数

    复制代码
    mysql> select variable_name,variable_value from information_schema.session_variables where variable_name in ('interactive_timeout','wait_timeout');
    +---------------------+----------------+
    | variable_name       | variable_value |
    +---------------------+----------------+
    | INTERACTIVE_TIMEOUT | 28800          |
    | WAIT_TIMEOUT        | 28800          |
    +---------------------+----------------+
    2 rows in set (0.06 sec)
    
    mysql> set session INTERACTIVE_TIMEOUT=10;
    Query OK, 0 rows affected (0.00 sec) ----------等待10s后执行
    mysql> select variable_name,variable_value from information_schema.session_variables where variable_name in ('interactive_timeout','wait_timeout');
    +---------------------+----------------+
    | variable_name       | variable_value |
    +---------------------+----------------+
    | INTERACTIVE_TIMEOUT | 10             |
    | WAIT_TIMEOUT        | 28800          |
    +---------------------+----------------+
    2 rows in set (0.06 sec)
    复制代码

    Q2:会话变量wait_timeout的继承问题

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

  • 相关阅读:
    .NET程序内存分析工具CLRProfiler的使用
    Hudson、Jenkins的node节点设置(分布式处理自动化测试用例)
    Ruby+watir不能定位新打开的窗口解决办法
    L邮政挂号信查询
    ruby读写txt文件
    Jenkins、Hudson安装、配置详细记录
    nagios原理(二)
    存储过程例子
    存储过程 插入明细表
    nagios原理(一)
  • 原文地址:https://www.cnblogs.com/juehai/p/9636691.html
Copyright © 2011-2022 走看看