Les logs MySQL server

MySQL possède plusieurs logs qui peuvent vous aider à savoir ce qui se passe à l’intérieur de mysqld:

  • Log error : contient les problèmes rencontrés lors du démarrage, de l’exécution ou de l’arrêt de mysqld. Il est très utile si vous ne pouvez plus (re)démarré votre serveur.
  • Log ISAM : Garde une trace des changements liés au tables ISAM. Utilisé uniquement pour déboguer le codeISAM. ISAM est un “storage engine” gérant le stockage de vos tables et base de données en fichier.
  • Le log de requêtes : Contient toutes les connexions établies et requêtes exécutées sur le serveur.
  • Le log de mises à jour  : Désapprouvé : Enregistre toutes les commandes qui changent les données.
  • Le log binaire : Enregistre toutes les commandes qui changent quelque chose. Utilisé pour la réplication.
  • Le log des requêtes lentes : Enregistre toutes les requêtes qui ont pris plus de long_query_time à s’exécuter ou celles qui n’ont pas utilisé d’index.

Si vous voulez voir ce qu’il se passe sur une journée ou un plus petite tranche de temps, l’activation du log des requêtes vous sera utile. Il s’active en ajoutant (en décommentant) les lignes suivantes dans le fichier /etc/mysql/my.cnf ;

# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
general_log_file = /var/log/mysql/mysql.log
general_log = 1
log_error = /var/log/mysql/error.log

“general_log_file” contient donc le chemin vers le log qui contiendra tous les accès au serveur.

vous devez savoir que l’activation de ce log est une perte de performance énorme. Cela ralentira votre système et vos accès à MySQL. De plus, la taille de ce fichier augmente très très rapidement. Il est donc conseillé de le vider régulièrement avec la commande

cat /dev/null > /var/log/mysql/mysql.log

Et pour finir, voici un exemple de log pour que vous puissiez voir le format :

121217 14:05:55 633 Query select 1
633 Query SET autocommit=1
633 Query select roleUserGroup,privilege,priority from secObjPrivilege where objectName = '_appointment' order by priority desc
633 Query select roleUserGroup,privilege,priority from secObjPrivilege where objectName = '_site_access_privacy' order by priority desc
633 Query select roleUserGroup,privilege,priority from secObjPrivilege where objectName = '_team_access_privacy' order by priority desc
633 Query select roleUserGroup,privilege,priority from secObjPrivilege where objectName = '_appointment' order by priority desc
629 Query select 1
629 Query SET autocommit=0