Mysql
 sql >> Base de données >  >> RDS >> Mysql

Configuration de MySQL 8

Configurer MySQL 8

MySQL a deux types de paramètres :

Statique, qui prend effet après le redémarrage du serveur MySQL Dynamique, qui peut être modifié en ligne sans redémarrer le serveur MySQL fonctionne dans la version 5.7 et ultérieure.

Les variables peuvent être définies comme suit :

  • Fichier de configuration
  • Script de démarrage
  • Utilisation de la commande SET
  • Paramètres de configuration persistants

Utilisation du fichier de configuration :

Le fichier de configuration se trouve dans /etc/my.cnf (RHL et CENTOS) et /etc/mysql/my.cnf (Debian). Vous pouvez modifier ce fichier dans l'éditeur de votre choix.

Le fichier de configuration contient les sections ci-dessous, le paramètre associé doit être conservé sous celles-ci.

  • [mysql] :la section est lue par le client en ligne de commande mysql
  • [client] :la section est lue par tous les clients qui se connectent (y compris mysql cli)
  • [mysqld] :la section est lue par le serveur mysql
  • [mysqldump] :la section est lue par l'utilitaire de sauvegarde appelé mysqldump
  • [mysqld_safe] :lu par le mysqld_safeprocess (script de démarrage de MySQL Server)
[[email protected] ~]# mysql -e "select @@server_id;"
+-------------+
| @@server_id |
+-------------+
|           1 |

changez le paramètre server-id à 2 et redémarrez le serveur mysql

#vim /etc/my.cnf
server-id=2 (edit this parameter in config file)

#sudo systemctl restart mysqld

[[email protected] ~]# mysql -e "select @@server_id;"
+-------------+
| @@server_id |
+-------------+
|           2|

Utilisation des paramètres avec le script de démarrage :

Supposons que vous souhaitiez démarrer MySQL en utilisant un script de démarrage et non via systemd,

en particulier pour les tests ou pour un changement temporaire. Vous pouvez passer les variables au script

plutôt que de le changer dans le fichier de configuration

# /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/data/centos7.err --pidfile=/usr/local/mysql/data/centos7.pid --init-file=/tmp/mysql-init &

Vous pouvez voir que le paramètre –init-file est passé au serveur. Le serveur exécute les instructions SQL dans ce fichier avant de démarrer

Utilisation des variables globales et de session :

Il existe deux types de variables en fonction de la portée de la variable :

Global :s'applique à toutes les nouvelles connexions

Session :s'applique uniquement à la connexion en cours (session)

J'utiliserai sort_buffer_size pour cet exemple car il a une portée globale et au niveau de la session, donc cela expliquera très bien la portée.

mysql> SET GLOBAL sort_buffer_size = 512 * 1024;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@sort_buffer_size;
+--------------------+
| @@sort_buffer_size |
+--------------------+
|             262144 |
+--------------------+
1 row in set (0.00 sec)

Cela n'a pas changé car la taille du sort_buffer a une portée à la fois globale et au niveau de la session et le global n'est qu'une valeur par défaut pour les nouvelles sessions. Nous utilisions la même connexion client tout du long donc avec le même global nous avons changé la valeur par défaut pour les nouvelles sessions mais notre session n'est pas nouvelle, notre session a commencé avant le changement de la valeur par défaut. Nous pouvons donc utiliser Select @@global.sort_buffer_size pour interroger la valeur globale

mysql> SELECT @@global.sort_buffer_size;
+---------------------------+
| @@global.sort_buffer_size |
+---------------------------+
|                    524288 |
+---------------------------+
1 row in set (0.00 sec)

mysql> SELECT @@global.sort_buffer_size, @@session.sort_buffer_size;
+---------------------------+----------------------------+
| @@global.sort_buffer_size | @@session.sort_buffer_size |
+---------------------------+----------------------------+
|                    524288 |                     262144 |
+---------------------------+----------------------------+
1 row in set (0.00 sec)

Paramètres de configuration persistants :

vérifiez le sort_buffer_size à partir du schéma de performances, des variables de session et du tableau des variables globales.

mysql> SELECT * FROM performance_schema.session_variables WHERE variable_name LIKE 'sort_buffer_size';
+------------------+----------------+
| VARIABLE_NAME    | VARIABLE_VALUE |
+------------------+----------------+
| sort_buffer_size | 262144         |
+------------------+----------------+
1 row in set (0.01 sec)

mysql> SELECT * FROM performance_schema.global_variables WHERE variable_name LIKE 'sort_buffer_size';
+------------------+----------------+
| VARIABLE_NAME    | VARIABLE_VALUE |
+------------------+----------------+
| sort_buffer_size | 262144         |
+------------------+----------------+
1 row in set (0.01 sec)

Les deux sont les mêmes car nous ne l'avons pas encore changé. Vérifions d'où vient cette valeur.

mysql> SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'sort_buffer_size';
+------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+
| VARIABLE_NAME    | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE            | SET_TIME | SET_USER | SET_HOST |
+------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+
| sort_buffer_size | GLOBAL          | /etc/my.cnf   | 32768     | 18446744073709551615 | NULL     | NULL     | NULL     |
+------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+
1 row in set (0.01 sec)

Nous pouvons donc voir que la variable provient de /etc/my.cnf et que la valeur VARIABLE_SOURCE est GLOBAL car cela n'a pas encore changé, la session a choisi la valeur globale lors de la connexion.

Modifions le Global sor_buffer_size et voyons quel sera le résultat.

mysql> SET GLOBAL sort_buffer_size = 512 * 1024;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'sort_buffer_size';
+------------------+-----------------+---------------+-----------+----------------------+----------------------------+----------+-----------+
| VARIABLE_NAME    | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE            | SET_TIME                   | SET_USER | SET_HOST  |
+------------------+-----------------+---------------+-----------+----------------------+----------------------------+----------+-----------+
| sort_buffer_size | DYNAMIC         |               | 32768     | 18446744073709551615 | 2020-08-09 11:04:01.681846 | root     | localhost |
+------------------+-----------------+---------------+-----------+----------------------+----------------------------+----------+-----------+
1 row in set (0.01 sec)

Maintenant, comme nous pouvons voir que la source est dynamique, SET_TIME a été modifié et c'est l'utilisateur root qui a effectué les modifications.

Vérifions une variable qui n'est pas dans my.cnf comme le délai d'attente.

mysql> SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'wait_timeout';
+---------------+-----------------+---------------+-----------+-----------+----------+----------+----------+
| VARIABLE_NAME | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE | SET_TIME | SET_USER | SET_HOST |
+---------------+-----------------+---------------+-----------+-----------+----------+----------+----------+
| wait_timeout  | COMPILED        |               | 1         | 31536000  | NULL     | NULL     | NULL     |
+---------------+-----------------+---------------+-----------+-----------+----------+----------+----------+
1 row in set (0.00 sec)

Vous pouvez voir que la variable source, dans ce cas, c'est COMPILED ce qui signifie que nous utilisons la valeur par défaut du serveur. Changeons-le en autre chose.

mysql> SET GLOBAL wait_timeout=100;
Query OK, 0 rows affected (0.00 sec)

Maintenant, si nous vérifions à nouveau que la source sera dynamique, nous y voilà.

mysql> SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'wait_timeout';
+---------------+-----------------+---------------+-----------+-----------+----------------------------+----------+-----------+
| VARIABLE_NAME | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE | SET_TIME                   | SET_USER | SET_HOST  |
+---------------+-----------------+---------------+-----------+-----------+----------------------------+----------+-----------+
| wait_timeout  | DYNAMIC         |               | 1         | 31536000  | 2020-08-09 11:08:57.537268 | root     | localhost |
+---------------+-----------------+---------------+-----------+-----------+----------------------------+----------+-----------+
1 row in set (0.01 sec)

Rendons cela persistant avec la commande PERSIST. REMARQUE nous n'avons pas ajouté ces modifications dans mon fichier.cnf

mysql> SET PERSIST wait_timeout=100;
Query OK, 0 rows affected (0.00 sec)

Quittez le client MySQL et vérifiez que le paramètre est bien dans mysqld-auto.cnf.

[[email protected] ~]# sudo cat /var/lib/mysql/mysqld-auto.cnf
{ "Version" : 1 , "mysql_server" : { "mandatory_roles" : { "Value" : "dbt3_read23" , "Metadata" : { "Timestamp" : 1592984803211900 , "User" : "root" , "Host" : "localhost" } } , "wait_timeout" : { "Value" : "100" , "Metadata" : { "Timestamp" : 1596960656007284 , "User" : "root" , "Host" : "localhost" } } } }

Redémarrez le serveur mysql et vérifiez que le chemin de la valeur de la variable wait_timeout arrive, il viendra de /var/lib/mysql/mysqld-auto.cnf comme indiqué ci-dessous.

mysql> SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'wait_timeout';
+---------------+-----------------+--------------------------------+-----------+-----------+----------------------------+----------+-----------+
| VARIABLE_NAME | VARIABLE_SOURCE | VARIABLE_PATH                  | MIN_VALUE | MAX_VALUE | SET_TIME                   | SET_USER | SET_HOST  |
+---------------+-----------------+--------------------------------+-----------+-----------+----------------------------+----------+-----------+
| wait_timeout  | PERSISTED       | /var/lib/mysql/mysqld-auto.cnf | 1         | 31536000  | 2020-08-09 11:10:56.007284 | root     | localhost |
+---------------+-----------------+--------------------------------+-----------+-----------+----------------------------+----------+-----------+
1 row in set (0.01 sec)

Si vous vérifiez la valeur de 'sort_buffer_size', elle est toujours la même car nous n'avons pas changé sa valeur, elle provient toujours du même chemin et la source est GLOBAL.

mysql>  SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'sort_buffer_size';
+------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+
| VARIABLE_NAME    | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE            | SET_TIME | SET_USER | SET_HOST |
+------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+
| sort_buffer_size | GLOBAL          | /etc/my.cnf   | 32768     | 18446744073709551615 | NULL     | NULL     | NULL     |
+------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+
1 row in set (0.00 sec)