Un script pour découper un binlog par base (utile quand on veut les requetes sur une seule base entre tel et tel moment)
#!/bin/bash # prévu pour avoir un n° de log binaire (6 chiffres) ou un fichier sql issu d’un binlog en param LOGDIR=/var/log/mysql LOGPREFIX=mysql-bin. DUMP="$LOGPREFIX$1".sql [ ! -f $1 ] && [ ! -f $LOGDIR/$LOGPREFIX$1 ] && echo "Il faut donner un fichier ou le n° du log à 6 chiffres en param, $LOGDIR/$LOGPREFIX$1 n’existe pas" && exit 1 # Pour éviter tout pb d’encodage alias awk='env LANGUAGE=C LANG=C LC_ALL=C LC_NUMERIC=C awk' if [ -f $1 ] then commande="cat $1" # tant pis pour le UUOC else commande="mysqlbinlog $LOGDIR/$LOGPREFIX$1" fi $commande | awk ' BEGIN { l=0; head=""; suf="'$1'" ".sql"; out="/dev/null" # pour les lignes avant 1er init } {l+=1} l==3 {delim = substr($0, 11, length($0)-11); } # DELIMITER l<4 { head = head $0 "\n"} # format du dump /^use / { db = substr($2, 1, length($2)-length(delim)-1) out = db suf print "requetes pour " db " dans " out if (db in logs) ; else { # init du dump logs[db] = 1 print head > out } } l>3 { print $0 >> out } END { for (db in logs) { out = db suf; print $0 >> out; # close(out); # plus très utile... } } '