MySQL wait_timeout变量 - GLOBAL vs SESSION

时间:2010-12-14 14:44:14

标签: mysql global-variables session-variables

SHOW VARIABLES LIKE "%wait%"

Result: 28800

SET @@GLOBAL.wait_timeout=300

SHOW GLOBAL VARIABLES LIKE "%wait%"

Result: 300

SHOW SESSION VARIABLES LIKE "%wait%"

Result:28800

我对结果感到困惑。为什么最后一个查询给出结果:28800?

3 个答案:

答案 0 :(得分:62)

您的会话状态在您开始会话后设置,默认情况下,取当前的GLOBAL值。

如果您在SET @@GLOBAL.wait_timeout=300之后断开连接,然后重新连接,则会看到

SHOW SESSION VARIABLES LIKE "%wait%";

Result: 300

同样,在任何时候,如果你做了

mysql> SET session wait_timeout=300;

你会得到

mysql> SHOW SESSION VARIABLES LIKE 'wait_timeout';

+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 300   |
+---------------+-------+

答案 1 :(得分:17)

SHOW SESSION VARIABLES LIKE "wait_timeout"; -- 28800
SHOW GLOBAL VARIABLES LIKE "wait_timeout"; -- 28800

首先,wait_timeout = 28800这是默认值。要更改会话值,您需要设置全局变量,因为会话变量是只读的。

SET @@GLOBAL.wait_timeout=300

设置全局变量后,会话变量会自动获取该值。

SHOW SESSION VARIABLES LIKE "wait_timeout"; -- 300
SHOW GLOBAL VARIABLES LIKE "wait_timeout"; -- 300

下次服务器重启时,会话变量将设置为默认值,即28800。

P.S。我正在使用MySQL 5.6.16

答案 2 :(得分:4)

Riedsio所述,会话变量在连接后不会更改,除非您专门设置它们;设置全局变量只会更改下一个连接的会话值。

例如,如果您有100个连接并且降低了全局wait_timeout,则它不会影响现有连接,只会在变量更改后影响新连接。

特别是对于wait_timeout变量,有一个扭曲。 如果您在交互模式下使用mysql客户端,或者通过CLIENT_INTERACTIVE设置了mysql_real_connect()的连接器,那么您会看到interactive_timeout设置@@session.wait_timeout < / p>

在这里你可以看到这个证明:

> ./bin/mysql -Bsse 'select @@session.wait_timeout, @@session.interactive_timeout, @@global.wait_timeout, @@global.interactive_timeout' 
70      60      70      60

> ./bin/mysql -Bsse 'select @@wait_timeout'                                                                                                 
70

> ./bin/mysql                                                                                                                               
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.12-5 MySQL Community Server (GPL)

Copyright (c) 2009-2016 Percona LLC and/or its affiliates
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select @@wait_timeout;
+----------------+
| @@wait_timeout |
+----------------+
|             60 |
+----------------+
1 row in set (0.00 sec)

因此,如果您使用客户端对此进行测试,那么您在连接时会看到interactive_timeout,而不是wait_timeout

的值