Création d'un chapitre sur le logging et documentation de "SET GLOBAL GENERAL_LOG=ON" (Merci Benoît !)

This commit is contained in:
Gregory Colpart 2019-01-18 03:33:28 +01:00
parent 0590347842
commit d5a0dd926a

View file

@ -691,34 +691,6 @@ mysql> set global max_connections = 350;
> *Note* : on prendra garde à modifier aussi en dur dans la configuration si le changement doit être persistent.
### Log des requêtes lentes (slow queries)
Pour débugger les applications lentes, c'est une fonctionnalité intéressante de trouver quelle requête est longue.
Pour cela on peut spécifier quand une requête est considérée comme longue, le chemin où stocker les requêtes, et l'activation des logs.
~~~{.ini}
[mysqld]
long_query_time = 5
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
~~~
Ou à chaud :
~~~{.sql}
mysql> SET GLOBAL slow_query_log=ON;
mysql> SET GLOBAL long_query_time=5;
mysql> SET GLOBAL slow_query_log_file= "/var/log/mysql/slow.log";
~~~
Il est également possible de remonter les requêtes n'utilisant pas d'index (qu'importe le temps qu'elle prennent pour s'exécuter), avec le paramètre booléen `log_queries_not_using_indexes`.
Pour avoir une meilleure lecture des slow query, on peut utilisé la commande [mysqldumpslow](https://dev.mysql.com/doc/refman/5.7/en/mysqldumpslow.html) :
~~~
# mysqldumpslow /var/log/mysql/mysql-slow.log
~~~
### pt-query-digest
Un outil de Percona disponible dans le paquet `percona-toolkit`, pt-query-digest, permet de faire une analyse des slows query, il suffit de lui passer en paramètre le fichier de log des slows query :
@ -773,6 +745,60 @@ mysql> show variables like 'read_only';
mysql> show variables like '%thread%';
~~~
### Lecture seule
Si on veut qu'une instance de MySQL soit démarrée en lecture seule, on peut ajouter la variable `read_only = 1` dans la section `[mysqld]`. Seules les requêtes faites par des utilisateurs ayant le privilège SUPER seront alors exécutées.
C'est par exemple utile dans une situation où une instance "slave" doit pouvoir être utilisée en lecture seule, tout en utilisant les mêmes comptes utilisateurs qui ont accès en écriture sur le "master". La réplication en elle-même n'est pas impactée.
## Logs
### Log de toutes les requêtes
On peut activer à chaud le logging de l'ensemble des requêtes :
~~~{.sql}
mysql> SET GLOBAL GENERAL_LOG=ON;
~~~
Toutes les requêtes seront immédiatemment écrites dans le fichier `DATADIR/HOSTNAME.log`.
Pour désactiver à chaud :
~~~{.sql}
mysql> SET GLOBAL GENERAL_LOG=OFF;
~~~
> *Note* : évidemment, sur un serveur de production il faut éviter d'activer cela plus de quelques secondes car cela impacte fortement la performance et cela va rapidement remplir l'espace disque.
### Log des requêtes lentes (slow queries)
Pour débugger les applications lentes, c'est une fonctionnalité intéressante de trouver quelle requête est longue.
Pour cela on peut spécifier quand une requête est considérée comme longue, le chemin où stocker les requêtes, et l'activation des logs.
~~~{.ini}
[mysqld]
long_query_time = 5
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
~~~
Ou à chaud :
~~~{.sql}
mysql> SET GLOBAL slow_query_log=ON;
mysql> SET GLOBAL long_query_time=5;
mysql> SET GLOBAL slow_query_log_file= "/var/log/mysql/slow.log";
~~~
Il est également possible de remonter les requêtes n'utilisant pas d'index (qu'importe le temps qu'elle prennent pour s'exécuter), avec le paramètre booléen `log_queries_not_using_indexes`.
Pour avoir une meilleure lecture des slow query, on peut utilisé la commande [mysqldumpslow](https://dev.mysql.com/doc/refman/5.7/en/mysqldumpslow.html) :
~~~
# mysqldumpslow /var/log/mysql/mysql-slow.log
~~~
### Log des dead lock
> *Note* : Seulement possible depuis MySQL 5.6 ou MariaDB 10.
@ -788,11 +814,6 @@ innodb_print_all_deadlocks = on
mysql> SET GLOBAL innodb_print_all_deadlocks=on;
~~~
### Lecture seule
Si on veut qu'une instance de MySQL soit démarrée en lecture seule, on peut ajouter la variable `read_only = 1` dans la section `[mysqld]`. Seules les requêtes faites par des utilisateurs ayant le privilège SUPER seront alors exécutées.
C'est par exemple utile dans une situation où une instance "slave" doit pouvoir être utilisée en lecture seule, tout en utilisant les mêmes comptes utilisateurs qui ont accès en écriture sur le "master". La réplication en elle-même n'est pas impactée.
## Sauvegarde