2010-12-14 23 views

risposta

56

Lo stato della sessione viene impostato dopo l'avvio di una sessione e, per impostazione predefinita, assume il valore GLOBAL corrente.

Se è stato scollegato dopo che avete fatto SET @@GLOBAL.wait_timeout=300, poi successivamente ricollegato, vedreste

SHOW SESSION VARIABLES LIKE "%wait%"; 

Result: 300 

Allo stesso modo, in qualsiasi momento, se avete fatto

mysql> SET session wait_timeout=300; 

Otterreste

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 

All'inizio, wait_timeout = 28800, che è il valore predefinito. Per modificare il valore della sessione, è necessario impostare la variabile globale perché la variabile di sessione è di sola lettura.

SET @@GLOBAL.wait_timeout=300 

Dopo aver impostato la variabile globale, la variabile di sessione acquisisce automaticamente il valore.

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

La prossima volta quando il riavvio del server, le variabili di sessione verranno impostati al valore di default cioè 28800.

P.S. Sto usando MySQL 5.6.16

+2

La tua risposta contraddice direttamente l'OP e non affronta la contraddizione. – klaar

1

Come notato da Riedsio, le variabili di sessione non cambiano dopo aver effettuato la connessione, a meno che non le imposti specificamente; l'impostazione della variabile globale modifica solo il valore della sessione della prossima connessione.

Ad esempio, se si dispone di 100 connessioni e si riduce il valore globale wait_timeout, questo non influirà sulle connessioni esistenti, ma solo su quelle nuove dopo la modifica della variabile.

In particolare per la variabile wait_timeout, tuttavia, c'è una svolta. Se si utilizza il client mysql in modalità interattiva, o il connettore con CLIENT_INTERACTIVE impostato tramite mysql_real_connect() poi si vedrà il set interactive_timeout per @@session.wait_timeout

Qui si può vedere questo ha dimostrato:

> ./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) 

Quindi, se stai testando questo utilizzando il client, è lo interactive_timeout che vedrai quando ti connetti e non il valore di wait_timeout