From d5a0dd926a22cad0fc8feb1cbd8bb2eacf307918 Mon Sep 17 00:00:00 2001 From: Gregory Colpart Date: Fri, 18 Jan 2019 03:33:28 +0100 Subject: [PATCH] =?UTF-8?q?Cr=C3=A9ation=20d'un=20chapitre=20sur=20le=20lo?= =?UTF-8?q?gging=20et=20documentation=20de=20"SET=20GLOBAL=20GENERAL=5FLOG?= =?UTF-8?q?=3DON"=20(Merci=20Beno=C3=AEt=20!)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HowtoMySQL.md | 87 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 54 insertions(+), 33 deletions(-) diff --git a/HowtoMySQL.md b/HowtoMySQL.md index 3d9b7bf7..d7bff110 100644 --- a/HowtoMySQL.md +++ b/HowtoMySQL.md @@ -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