2010-12-14 8 views
41
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 

私は結果によって混乱します。なぜ最後のクエリはResult:28800を返しますか?MySQLのwait_timeout変数 - GLOBAL vsセッション

答えて

56

セッションを開始するとセッションステータスが設定され、デフォルトでは現在のGLOBAL値が使用されます。あなたがSET @@GLOBAL.wait_timeout=300をした後、あなたが切断した場合、あなたが

mysql> SET session wait_timeout=300; 

をしなかった場合

、その後再接続し、あなたはあなたが取得したい、いつでも、同様に

SHOW SESSION VARIABLES LIKE "%wait%"; 

Result: 300 

を参照してくださいね

mysql> SHOW SESSION VARIABLES LIKE 'wait_timeout'; 

+---------------+-------+ 
| Variable_name | Value | 
+---------------+-------+ 
| wait_timeout | 300 | 
+---------------+-------+ 
11
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

あなたの答えはOPと直接矛盾し、あなたは矛盾に対処しません。 – klaar

1

Riedsioで示されるように、セッション変数は、特に指定しない限り、接続後は変更されません。グローバル変数を設定すると、次の接続のセッション値だけが変更されます。

たとえば、接続数が100で、グローバルwait_timeoutを下回ると、既存の接続には影響せず、変数が変更された後は新しい接続のみに影響します。

具体的にはwait_timeoutの変数には、ひねりがあります。 あなたはここで、あなたが@@session.wait_timeout

ためinteractive_timeoutセットが表示されます対話モードでmysqlクライアントを使用して、またはmysql_real_connect()経由で設定CLIENT_INTERACTIVEとコネクタされている場合は、これが実証され見ることができます:

> ./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です。