MySQL Server génère plusieurs journaux qui peuvent vous aider à surveiller les activités du serveur. Cependant, une fois ces journaux activés, leur taille peut augmenter et commencer à occuper trop d'espace disque. C'est pourquoi il est important d'avoir un moyen automatisé d'archiver et de conserver les fichiers journaux MySQL pendant une certaine durée, ainsi que de supprimer les anciens. Dans cet article de blog, nous décrivons quelques bonnes pratiques pour configurer et gérer les journaux d'erreurs MySQL, les journaux généraux et les journaux de requêtes lentes pour vos déploiements MySQL.
Configuration de la journalisation du serveur MySQL
Voyons comment configurer les 3 types de journaux suivants :
Journal des erreurs
Journalise tous les problèmes rencontrés lors du démarrage, de l'exécution ou de l'arrêt de mysqld. Ce journal peut être activé en ayant l'option suivante dans le fichier /etc/my.cnf :
- log_error=/var/log/mysql/mysqld.log
Journal des requêtes générales
Journalise les connexions client établies et les déclarations reçues des clients. Ce journal peut être activé en ayant l'option suivante dans le fichier /etc/my.cnf :
- general_log=ON
- general_log_file=/var/log/mysql/general.log
Journal des requêtes lentes
Journalise les requêtes dont l'exécution a pris plus de long_query_time secondes. Ce journal peut être activé par l'option suivante dans le fichier /etc/my.cnf :
- slow_query_log=ON
- slow_query_log_file=/var/log/mysql/mysql-slowquery.log
Configuration des critères de rotation des journaux
A titre d'exemple, prenons quelques critères pour gérer les journaux de requêtes MySQL généraux. Nous pouvons proposer un ensemble de critères appropriés pour la gestion des journaux en posant les questions suivantes :
Q :Quelle est la taille maximale que le fichier journal peut atteindre ?
Q :À quelle fréquence souhaitez-vous que le fichier journal soit remplacé ?
R :Nous pouvons dire que nous voulons que les journaux soient alternés quotidiennement.
Q :Combien d'anciens fichiers journaux souhaitez-vous conserver ?
R :Nous aimerions conserver les 30 derniers fichiers journaux.
Sur la base des critères ci-dessus, l'espace disque global requis pour la gestion générale du journal des requêtes est d'environ 1,2 Go. En supposant un taux de compression de 90 %, nous aurons 30 fichiers journaux compressés d'une taille de 30 Mo chacun et un fichier journal en direct d'environ 300 Mo.
Gestion des journaux du serveur MySQL :faire pivoter, compresser, conserver et supprimerCliquez pour tweeter
Gestion des journaux à l'aide de l'utilitaire Linux logrotate
logrotate est un utilitaire Linux qui aide à l'administration efficace des fichiers journaux et fournit des options pour la rotation, la compression et la suppression automatiques des fichiers journaux. Les critères établis ci-dessus peuvent être configurés pour l'utilitaire logrotate en créant un fichier de configuration dans le dossier /etc/logrotate.d.
Appelons ce fichier de configuration mysqlgeneral et le contenu du fichier sera :
/var/log/mysql/general.log{
compress
dateext
maxsize 300M
copytruncate
maxage 365
dateformat -%Y%m%d%s
daily
rotate 30
notifempty
}
Avec les options ci-dessus pour logrotate, les journaux de requête générale sont tournés quotidiennement ou lorsque la taille du fichier journal dépasse 300 Mo. Les anciens journaux sont compressés et 30 de ces fichiers seront conservés. La rotation du journal sera ignorée si le fichier journal est vide en raison du paramètre "notifempty".
L'option « copytruncate » permet de s'assurer que le fichier journal actuel n'est jamais supprimé pendant la rotation et que seul son contenu est tronqué. Ceci est important car certaines applications s'attendent à ce que le fichier journal soit toujours disponible et il n'est pas possible de supprimer le journal sans arrêter l'application au préalable.
Maintenant que la configuration de la rotation des journaux est définie pour le journal des requêtes générales, l'utilitaire logrotate doit être exécuté afin que la configuration ci-dessus soit exécutée. Cela se fait généralement via une tâche cron. Nous pouvons le configurer pour qu'il s'exécute toutes les heures en plaçant le script logrotate dans le répertoire /etc/cron.hourly :
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
Ainsi, en quelques étapes simples, nous avons configuré la rotation des journaux pour les journaux généraux MySQL en fonction de nos critères. La même approche peut également être suivie pour les journaux d'erreurs MySQL et les journaux de requêtes lentes. Consultez ces autres articles pour en savoir plus sur l'optimisation de vos déploiements MySQL :
- Calcul de la taille du pool de tampons InnoDB pour votre serveur MySQL
- Tutoriel MySQL – Configuration et gestion de SSL sur votre serveur MySQL
- Explication du cadre de haute disponibilité MySQL – Partie I :Introduction