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
Je suis confus par les résultats. Pourquoi la dernière requête donne-t-elle Résultat: 28800?
Le statut de votre session est défini une fois que vous avez démarré une session et que vous prenez par défaut la valeur GLOBAL actuelle.
Si vous vous êtes déconnecté après avoir fait SET @@GLOBAL.wait_timeout=300
, Puis reconnecté par la suite, vous verriez
SHOW SESSION VARIABLES LIKE "%wait%";
Result: 300
De même, à tout moment, si vous le faisiez
mysql> SET session wait_timeout=300;
Vous auriez
mysql> SHOW SESSION VARIABLES LIKE 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 300 |
+---------------+-------+
SHOW SESSION VARIABLES LIKE "wait_timeout"; -- 28800
SHOW GLOBAL VARIABLES LIKE "wait_timeout"; -- 28800
Au début, wait_timeout = 28800, qui est la valeur par défaut. Pour modifier la valeur de la session, vous devez définir la variable globale car celle-ci est en lecture seule.
SET @@GLOBAL.wait_timeout=300
Une fois que vous avez défini la variable globale, la variable de session saisit automatiquement la valeur.
SHOW SESSION VARIABLES LIKE "wait_timeout"; -- 300
SHOW GLOBAL VARIABLES LIKE "wait_timeout"; -- 300
Lors du prochain redémarrage du serveur, les variables de session seront définies sur la valeur par défaut, à savoir 28800.
P.S. J'utilise MySQL 5.6.16
Comme indiqué par Riedsio , les variables de session ne changent pas après la connexion, sauf si vous les définissez spécifiquement; la définition de la variable globale modifie uniquement la valeur de session de votre prochaine connexion.
Par exemple, si vous avez 100 connexions et que vous réduisez le total wait_timeout
, Cela n'affectera pas les connexions existantes, mais uniquement les nouvelles après la modification de la variable.
Spécifiquement pour la variable wait_timeout
Cependant, il y a une torsion. Si vous utilisez le client mysql
en mode interactif ou si le connecteur avec CLIENT_INTERACTIVE
Est défini via mysql_real_connect()
, vous verrez alors le interactive_timeout
Défini pour @@session.wait_timeout
Ici vous pouvez voir cette démonstration:
> ./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)
Donc, si vous testez cela avec le client, c’est le interactive_timeout
Que vous verrez lors de la connexion et non la valeur de wait_timeout