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 :-)

Vus : 736
Publié par C-quad : 36