8 MySQL Scripts clients et utilitaires
Manuel de Référence MySQL 4.1 : Version Française
. Présentation des scripts serveurs et utilitaires . myisampack , le générateur de tables MySQL compressées en lecture seule . mysql , l'outil en ligne de commande . mysqladmin , administration d'un serveur MySQL ->mysqlbinlog , Exécuter des requêtes dans le log binaire . mysqlcc , MySQL Control Center . Utiliser mysqlcheck pour l'entretien et la réparation . mysqldump , sauvegarde des structures de tables et les données . mysqlhotcopy , copier les bases et tables MySQL . mysqlimport , importer des données depuis des fichiers texte . Afficher les bases, tables et colonnes . perror , expliquer les codes d'erreurs . L'utilitaire de remplacement de chaînes replace
|
8.5 mysqlbinlog , Exécuter des requêtes dans le log binaire
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 Le log binaire des mises à jour .
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 ( 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 ajoute
LOCAL
),
le client et le serveur que vous utilisez pour traiter les commandes doivent être
configuré pour autoriser l'option
LOCAL
.
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.
|