Aru*_*ith 54 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
Run Code Online (Sandbox Code Playgroud)
我对结果感到困惑.为什么最后一个查询给出结果:28800?
Rie*_*sio 63
您启动会话后会设置会话状态,默认情况下,采用当前的GLOBAL值.
如果您在完成后断开连接SET @@GLOBAL.wait_timeout=300,然后重新连接,您会看到
SHOW SESSION VARIABLES LIKE "%wait%";
Result: 300
Run Code Online (Sandbox Code Playgroud)
同样,在任何时候,如果你这样做
mysql> SET session wait_timeout=300;
Run Code Online (Sandbox Code Playgroud)
你会得到的
mysql> SHOW SESSION VARIABLES LIKE 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 300 |
+---------------+-------+
Run Code Online (Sandbox Code Playgroud)
小智 19
SHOW SESSION VARIABLES LIKE "wait_timeout"; -- 28800
SHOW GLOBAL VARIABLES LIKE "wait_timeout"; -- 28800
Run Code Online (Sandbox Code Playgroud)
首先,wait_timeout = 28800这是默认值.要更改会话值,您需要设置全局变量,因为会话变量是只读的.
SET @@GLOBAL.wait_timeout=300
Run Code Online (Sandbox Code Playgroud)
设置全局变量后,会话变量会自动获取该值.
SHOW SESSION VARIABLES LIKE "wait_timeout"; -- 300
SHOW GLOBAL VARIABLES LIKE "wait_timeout"; -- 300
Run Code Online (Sandbox Code Playgroud)
下次服务器重新启动时,会话变量将设置为默认值,即28800.
PS我使用的是MySQL 5.6.16
正如Riedsio指出的那样,会话变量在连接后不会更改,除非您进行了专门设置。设置全局变量只会更改下一个连接的会话值。
例如,如果您有100个连接,并且降低了全局连接,wait_timeout那么它将不会影响现有连接,仅影响更改变量后的新连接。
wait_timeout虽然专门针对变量,但有一个扭曲。如果您使用的是mysql客户端的交互模式,或与连接器CLIENT_INTERACTIVE通过一组mysql_real_connect(),那么你将看到interactive_timeout的集@@session.wait_timeout
在这里,您可以看到演示:
> ./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)
Run Code Online (Sandbox Code Playgroud)
因此,如果您正在使用客户端进行测试,则interactive_timeout连接时将看到的是该值,而不是wait_timeout
| 归档时间: |
|
| 查看次数: |
129693 次 |
| 最近记录: |