Les fichiers de log sont écrits dans un format binaire. Vous
pouvez éxaminer le log binaire avec l'utilitaire
mysqlbinlog
. Il est disponible depuis MySQL
3.23.14.
Appelez mysqlbinlog
comme ceci :
shell> mysqlbinlog [options] log-file ...
Par exemple, pour afficher le contenu du fichier de log binaire
binlog.000003
, utilisez cette commande :
shell> mysqlbinlog binlog.0000003
Le résultat est toutes les requêtes contenues dans le fichier de
log binaire binlog.000003
, avec différentes
informations (durée de la requête, identifiant du thread qui l'a
émise, timestamp d'émission, etc.).
Normalement, vous utilisez mysqlbinlog
pour
lire les fichiers de log directement, et les envoyer au serveur
MySQL local. Il est aussi possible de lire le fichier binaire sur
un serveur distant en utilisant l'option
--read-from-remote-server
. Cependant, c'est une
technique abandonnée, car nous préférons rendre plus simple
l'utilisation des logs binaires sur un serveur MySQL local.
Lorsque vous lisez des logs binaires distants, les options de
connexion peuvent être données pour indiquer comment se
connecter au serveur, mais ils sont ignorés à moins que vous ne
spécifiez aussi l'option
--read-from-remote-server
. Ces options sont
--host
, --password
,
--port
, --protocol
,
--socket
et --user
.
Vous pouvez aussi utiliser mysqlbinlog
pour
relayer des fichiers de log écrits par un serveur esclave, dans
une architecture de réplication. Les logs de relais sont au même
format que le log binaire.
Le log binaire est présenté en détails dans la section Section 5.9.4, « Le log binaire ».
mysqlbinlog
supporte les optiosn suivantes :
--help, -?
Affiche cette aide et quitte.
--database=db_name, -d db_name
Limite les lignes à cette base de données (log local uniquement).
--force-read, -f
Continue même si vous obtenez une erreur SQL.
--host=host_name, -h host_name
Lit le log binaire depuis le serveur MySQL distant.
--local-load=path, -l path
Prépare les fichiers temporaires destinés aux commandes
LOAD DATA INFILE
dans le dossier
spécifié.
--offset=N, -o N
Ignore les N
première lignes.
--password[=password], -p[password]
Le mot de passe utilisé lors de la connexion sur le serveur.
S'il n'est pas donné en ligne de commande, il sera demandé
interactivement. Notez que si vous utilisez la forme courte
-p
, vous ne devez pas
laisser d'espace entre l'option et le mot de passe.
--port=port_num, -P port_num
Le numéro de port TCP/IP pour la connexion.
--position=N, -j N
Comment la lecture dans le log binaire à la position
N
.
--protocol={TCP | SOCKET | PIPE | MEMORY}
Spécifie le protocole de connexion à utiliser. Nouveau en MySQL version 4.1.
--read-from-remote-server, -R
Read the binary log from a MySQL server. Les options de
connexion distantes seront ignorées à moins que cette option
ne soit donné. Ces options sont --host
,
--password
, --port
,
--protocol
, --socket
et
--user
.
--result-file=name, -r name
Export direct vers le fichier spécifié.
--short-form, -s
Affiche uniquement les commandes du log, sans les informations supplémentaires.
--socket=path, -S path
Le fichier de socket à utiliser pour la connexion.
--user=user_name, -u user_name
Le nom d'utilisateur MySQL lors de la connexion à distance.
--version, -V
Affiche la version et quitte.
Vous pouvez aussi configurer les variables suivantes avec l'option
--var_name=value
:
open_files_limit
Spécifie le nombre de pointeurs de fichiers à réserver.
Vous pouvez envoyer le résultat de mysqlbinlog
vers un client mysql
avec un pipe : c'est une
technique pour restaurer le serveur après un crash (see
Section 5.7.1, « Sauvegardes de base de données ») :
shell> mysqlbinlog hostname-bin.000001 | mysql
ou :
shell> mysqlbinlog hostname-bin.[0-9]* | mysql
Vous pouvez aussi rediriger le résultat de
mysqlbinlog
dans un fichier texte, modifier ce
fichier (supprimer les requêtes qui vous gênent), puis exécuter
ces requêtes, depuis le fichier, avec mysql
.
Après edition du fichier, exécutez les commandes qu'il contient
comme d'habitude, avec le programme mysql
.
mysqlbinlog
dispose de l'option
--position
qui affiche les requêtes du log
binaire à partir de la position spécifiée.
Si vous avez plus d'un fichier de log binaire à exécuter sur le serveur MySQL, la méthode sûre est de tout faire avec la même connexion MySQL. Voici la méthode dangeureuse :
shell>mysqlbinlog hostname-bin.000001 | mysql # DANGER!!
shell>mysqlbinlog hostname-bin.000002 | mysql # DANGER!!
Cela va causer des problèmes si le premier log contient des
commandes de type CREATE TEMPORARY TABLE
et que
le second contient des requêtes d'utilisation de cette table :
lorsque le premier mysql
termine son
exécution, il va détruire la table, et le second va rencontrer
des erreurs ``unknown table''.
Pour éviter cela, utilisez une seule connexion, surtout si vous utilisez des tables temporaires. Voici deux méthodes possibles :
shell> mysqlbinlog hostname-bin.000001 hostname-bin.000002 | mysql
La seconde méthode :
shell>mysqlbinlog hostname-bin.000001 > /tmp/statements.sql
shell>mysqlbinlog hostname-bin.000002 >> /tmp/statements.sql
shell>mysql -e "source /tmp/statements.sql"
Depuis MySQL 4.0.14, mysqlbinlog
peut préparer
des requêtes valides pour mysql
, afin d'il
utilise la commande LOAD DATA INFILE
depuis le
log binaire. COmme le log contient les données à charger (c'est
vrai depuis MySQL 4.0; MySQL 3.23 n'inscrivait pas les données à
charger dans le log binaire, et le fichier original était
nécessaire pour éxécuter le contenu du log binaire),
mysqlbinlog
va copier ces données dans un
fichie temporaire et émettre une commande LOAD DATA
INFILE
pour que mysql
le charge. Le
dossier du fichier temporaire est le dossier temporaire par
défaut : il peut être modifié avec l'option
local-load
de mysqlbinlog
.
Comme mysqlbinlog
convertit les commandes
LOAD DATA INFILE
en commandes LOAD
DATA LOCAL INFILE
(c'est à dire qu'il
ajouteLOCAL
), le client et le serveur que vous
utilisez pour traiter les commandes doivent être configuré pour
autoriser l'option LOCAL
. See
Section 5.4.4, « Problèmes de sécurité avec LOAD DATA LOCAL ».
ATTENTION : lorsque vous
exécutez mysqlbinlog
sur un fichier binaire,
il va créer un fichier temporaire pour chaque commande
LOAD DATA INFILE
. Ces fichiers ne
seront pas automatiquement effacés, car vous en aurez
besoin lorsque vous exécuterez les commandes SQL générées. Il
faudra les effacer manuellement lorsque vous n'en aurez plus
besoin. Les fichiers portent le nom de
temporary-dir/original_file_name-#-#
.
Dans le futur, nous allons corriger ce problème, en permettant à
mysqlbinlog
de se connecter directement au
serveur mysqld
. Dans ce cas, nous pourrons
supprimer tranquillement les fichiers de log, lorsqu'ils auront
été utilisés.
Avant MySQL 4.1, mysqlbinlog
ne pouvait pas
préparer de log SQL pour mysql
lorsque le log
binaire contenait des requêtes de différents threads, utilisant
des tables temporaires de même nom, si les requêtes étaient
mélangées. Ceci est corrigé en MySQL 4.1.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.