A partir de la version 4.0.3, nous fournissons un meilleur accès à beaucoup de variables système et variables de connexion. On peut changer la plupart d'entre elle sans avoir à stopper le serveur.
Le serveur mysqld
dispose de deux types de
variables. Les variables globales, qui affectent l'ensemble du
serveur. Les variables de session qui affectent des connexions
individuelles.
Lorsque mysqld
démarre, toutes les variables
globales sont initialisées à partir des arguments passés en
ligne de commande et des fichiers de configuration. Vous pouvez
changer ces valeurs avec la commande SET
GLOBAL
. Lorsqu'un nouveau thread est créé, les
variables spécifiques aux threads sont initialisées à partir
des variables globales et ne changeront pas même si vous utilisez
la commande SET GLOBAL
.
Le serveur entretient aussi un jeu de variables de session pour
chaque client qui se connecte. Les variables de session d'un
client sont initialisées au moment de la connexion, en utilisant
les valeurs correspondantes globales. Pour les variables de
session qui sont dynamiques, le client peut les changer avec la
commande SET SESSION var_name
. Modifier les
variables de session d'une connexion ne requiert aucun droit
spécifique, mais le client ne peut changer que ses propres
variables de session, et non pas celle d'un autre client.
Une modification à une variable globale est visible à tous les
clients qui accèdent à cette variable. Mais, cela n'affecte la
variable de session correspondante que lors de la prochaine
connexion. Les connexions déjà établies ne sont pas affectées
par un changement de variable globale. (pas même le client qui a
émis la commande SET GLOBAL
).
Pour définir la valeur d'une variable GLOBAL
,
vous devez utiliser l'une des syntaxes suivantes. Ici nous
utilisons la variable sort_buffer_size
à titre
d'exemple.
Pour donner la valeur à une variable GLOBAL
,
utilisez l'une de ces syntaxes :
mysql>SET GLOBAL sort_buffer_size=value;
mysql>SET @@global.sort_buffer_size=value;
Pour définir la valeur d'une variable SESSION
,
vous devez utiliser l'une des syntaxes suivantes :
mysql>SET SESSION sort_buffer_size=value;
mysql>SET @@session.sort_buffer_size=value;
mysql>SET sort_buffer_size=value;
LOCAL
est un synonyme de
SESSION
.
Si vous ne spécifiez pas GLOBAL
ou
SESSION
alors SESSION
est
utilisé. See Section 13.5.2.8, « Syntaxe de SET
».
Pour récupérer la valeur d'une variable de type
GLOBAL
vous pouvez utiliser l'une des commandes
suivantes :
mysql>SELECT @@global.sort_buffer_size;
mysql>SHOW GLOBAL VARIABLES like 'sort_buffer_size';
Pour récupérer la valeur d'une variable de type
SESSION
vous pouvez utiliser l'une des
commandes suivantes :
mysql>SELECT @@sort_buffer_size;
mysql>SELECT @@session.sort_buffer_size;
mysql>SHOW SESSION VARIABLES like 'sort_buffer_size';
Ici aussi, LOCAL
est un synonyme de
SESSION
.
Lorsque vous récupérez une valeur de variable avec la syntaxe
@@nom_variable
et que vous ne spécifiez pas
GLOBAL
ou SESSION
, MySQL
retournera la valeur spécifique au thread
(SESSION
) si elle existe. Sinon, MySQL
retournera la valeur globale.
Pour la commande SHOW VARIABLES
, si vous ne
spécifiez pas GLOBAL
,
SESSION
ou LOCAL
, MySQL
retourne les valeurs de SESSION
.
La raison d'imposer la présence du mot GLOBAL
pour configurer une variable de type GLOBAL
mais non pour la lire est pour être sur que vous n'aurez pas de
problèmes plus tard si vous voulez introduire ou effacer une
variable spécifique au thread qui aurait le même nom. Dans ce
cas, vous pourriez changer accidentellement l'état du serveur
pour toutes les connexions (et non la votre uniquement).
Plus d'informations sur les options de démarrage du système et
les variables système sont dans les sections
Section 5.2.1, « Options de ligne de commande de mysqld
» et
Section 5.2.3, « Variables serveur système ». Une liste des variables
qui peuvent être modifiées durant l'exécution est présentée
dans Section 5.2.3.1, « Variables système dynamiques ».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.