Mysql – Voir les requêtes qui ont été executées par le serveur
Cet article est parmi les plus court que j ’ai eu l ’occasion d ’écrire car il a surtout vocation à me servir de pense bête pour m ’éviter de faire deux fois la même recherche.
Le contexte :
Suite à des incidents sur un traitement qui génère dynamiquement une requête SQL et dont le contenu n ’est pas logué entièrement dans les logs applicatives, il m ’était nécessaire de récupérer les instructions SQL exécutées par le serveur.
Méthode par fichier de log des requêtes
Il existe bien une méthode qui permet d ’alimenter un fichier avec l ’ensemble des requêtes en modifiant la configuration my.cnf pour ceux que cela intéresse plus particulièrement : cf le support Mysql sur cette fonctionnalité
Cette méthode utilisant un fichier a malgré tout quelques inconvénients notables :
- Le fichier contenant les requêtes peut devenir très rapidement énorme et compromettre la stabilité du serveur (filesystem full etc)
- Il est nécessaire de redémarrer mysqld pour que la modification de paramétrage soit prise en compte
Méthode par alimentation de tables de logs
Depuis Mysql 5.1, il est possible plutôt que d ’alimenter un fichier de log d ’alimenter une table, ainsi que d ’activer et désactiver cette fonctionnalité sans avoir à redémarrer le serveur.
C ’est cette fonctionnalité que j ’ai choisi d ’utiliser. Il faut néanmoins pour pouvoir l ’utiliser avoir accès au schéma « mysql ».
Il suffit dans une console mysql de lancer les commandes suivantes (avec un compte disposant de suffisamment de privilèges ):
SET GLOBAL general_log = 'ON'; SET GLOBAL log_output = 'TABLE';
Ces deux commandes vont respectivement :
- Activer les logs générales
- Envoyer ces logs dans la table « mysql.general_log » plutôt que dans un fichier
Vous retrouverez ensuite l ’ensemble des requêtes exécutées dans la table mysql.general_log.
Pour désactiver il suffira de remettre à off le paramètre :
SET GLOBAL general_log = 'OFF';
Voila en espérant que cela permette de dépanner d ’autres personnes que moi