Comptage des requêtes des logs binaires de MySQL

Classé dans : Bases de données | aucun commentaire

jeudi 09 août 2012

Le log binaire de MySQL permet de loguer toutes les requêtes d'écriture (Insert, Update, Delete,...). Il est principalement utilisé pour la réplication et pour la sauvegarde.

Il peut être intéressant dans certains cas de connaître le type de requêtes et sur quelles tables elles sont exécutées.

Voici donc une méthode qui vous donnera le nombre de requêtes par type et par table.

1/ Générer un fichier lisible à partir du log binaire

Lancer la commande suivante (sous Windows, mais la procédure est la même sous linux) :

"C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqlbinlog.exe" le_fichier_de_log_binaire > le_fichier_en_clair

2/ Lancer la génération du rapport

Cette étape se fait sous Linux. Il faut donc récupérer le fichier généré ci-dessus.

Pour se simplifier la vie, nous allons créer un script binlog-report.sh qui sera réutilisable par la suite :

#!/bin/sh
grep -i -e "^update" -e "^insert" -e "^delete" -e "^replace" -e "^alter" ${1} | cut -c1-100 | tr '[A-Z]' '[a-z]' | sed -e "s/\t/ /g;s/\`//g;s/(.*$//;s/ set .*$//;s/ as .*$//" | sed -e "s/ where .*$//" | sort | uniq -c | sort -nr

N'oubliez pas de donner les droits d'exécution sur ce script :

chmod +x binlog-report.sh

Il ne reste plus qu'à lancer le script en passant notre fichier en paramètre :

./binlog-report.sh le_fichier_en_clair 

On obtient alors un rapport ressemblant à ceci :

 1200 insert table1
600 insert table2
400 update table1
50 delete table3
...

Remarque

La génération du fichier intermédiaire peut être omise sous Linux comme on le voit sur le lien ci après : http://oksoft.blogspot.fr/2010/08/extracting-queries-from-binary-files.html

J'ai dû en passer par là car mysqlbinlog sous Linux ne semble pas apprécier les fichier Windows.



Ecrire un commentaire

Les commentaires sont modérés et je ne publie pas les messages à caractère publicitaire. Inutile donc de vous acharner ;-)




Quelle est la première lettre du mot mxmed ? :