Doctrine est pratique mais pour voir la requête finale exécutée par le serveur c’est compliqué. Le plus simple est de demander directement à ce dernier de les enregistrer.

Ponctuellement

Pour cela il faut exécuter les requêtes suivantes sur le serveur

SET GLOBAL log_output = FILE;
SET GLOBAL general_log_file = "/path/to/logs/mysql.log";
SET GLOBAL general_log = ON

et toutes les requêtes seront sauvegardées dans /path/to/logs/mysql.log

Warning

  • ~ ne fonctionne pas dans le nom du fichier, il faut utiliser le chemin absolu.
  • Le dossier doit exister sur le serveur

il est aussi possible de les sauvegarder dans la table mysql.general_log en exécutant à la place

SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON'

On peut ensuite désactiver le log

SET GLOBAL general_log = 'OFF'

De façon permanente

C’est le même système mais dans le fichier my.cnf dans la partie [mysqld]

[mysqld]
log_output = FILE
general_log_file = "/path/to/logs/mysql.log"
general_log = ON

et toutes les requêtes seront sauvegardées dans /path/to/logs/mysql.log

il est aussi possible de les sauvegarder dans la table mysql.general_log en ajoutant à la place

[mysqld]
log_output = TABLE
general_log = ON

Warning

Les logs commencent dès que le serveur est démarré et toutes les requêtes sont enregistrées. Il ne faut pas oublier de vider la table ou le fichier régulièrement

Sources :