4.8 MySQL Scripts clients et utilitaires
4 Administration du serveur
Manuel de Référence MySQL 4.1 : Version Française
. Présentation des scripts serveurs et utilitaires . mysql , l'outil en ligne de commande . mysqladmin , administrer un serveur MySQL . Utiliser mysqlcheck pour l'entretien et la réparation ->mysqldump , exporter les 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 . Comment exécuter des commandes SQL depuis un fichier texte
|
4.8.5 mysqldump , exporter les structures de tables et les données
Utilitaire qui permet d'exporter une base ou un groupe de bases vers
un fichier texte, pour la sauvegarde ou le transfert entre deux
serveurs (pas nécessairement entre serveurs MySQL). L'export contiendra
les requêtes SQL nécessaires pour créer la table et la remplir.
Si vous faîtes une sauvegarde du serveur, vous devriez aussi utiliser
la commande
mysqlhotcopy
.
mysqlhotcopy
, copier les bases et tables MySQL .
shell> mysqldump [OPTIONS] database [tables] OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] OR mysqldump [OPTIONS] --all-databases [OPTIONS]
|
Si vous ne spécifiez pas de table, ou si vous utilisez l'option
--databases
ou
--all-databases
, la base de données complète sera exportée.Vous pouvez obtenir une liste des options valides pour votre version de
mysqldump
avec la commande
mysqldump --help
.
Notez que si vous exécutez
mysqldump
sans l'option
--quick
ou
--opt
,
mysqldump
va charger la totalité du résultat en mémoire,
avant de l'écrire. Cette option peut résoudre des problèmes de mémoire si vous
exportez de grosses tables.
Notez que si vous utilisez une nouvelles copie du programme
mysqldump
,
et que vous allez faire un export qui sera lu dans une vieille version
de MySQL, vous ne devriez pas utiliser les options
--opt
et
-e
.
mysqldump
supporte les options suivantes :
-
--add-locks
-
Ajoute une commande
LOCK TABLES
avant l'export de table et une commande
UNLOCK TABLE
après(Pour accélérer les inserionts dans MySQL).
-
--add-drop-table
-
Ajoute une commande
drop table
avant chaque requête de création de table.
-
-A, --all-databases
-
Exporte toutes les tables. C'est l'équivalent de l'option
--databases
avec
toutes les bases de données sélectionnées.
-
-a, --all
-
Inclut toutes les options de créations de table spécifiques à MySQL.
-
--allow-keywords
-
Permet la création de colonnes ayant des noms de mots réservés. Cela fonctionne
en préfixant chaque nom de colonne avec le nom de la table.
-
-c, --complete-insert
-
Utilise une commande complète d'insertion (avec les noms des colonnes).
-
-C, --compress
-
Compresse toutes les informations entre le client et le serveur, les deux
supporte la compression.
-
-B, --databases
-
Pour exporter plusieurs bases de données. Notez la différence d'utilisation.
Dans ce cas, aucune table n'est spécifié. Tous les arguments de noms sont
considérés comme des noms de base.
Une ligne
USE db_name;
sera ajoutée dans l'export avant chaque base
de données.
-
--delayed
-
Les insertions se font avec la commande
INSERT DELAYED
.
-
-e, --extended-insert
-
Utilise la nouvelle syntaxe multi-ligne
INSERT
. (Cela donne des insertions
plus courtes et plus efficaces).
-
-#, --debug[=option_string]
-
Trace l'utilisation du programme (pour le débogage).
-
--help
-
Affiche le message d'aide et quitte.
-
--fields-terminated-by=...
-
-
--fields-enclosed-by=...
-
-
--fields-optionally-enclosed-by=...
-
-
--fields-escaped-by=...
-
-
--lines-terminated-by=...
-
Ces options sont utilisées avec l'option
-T
et ont la même
signification que les clauses correspondantes de la commande
LOAD DATA INFILE
.
Syntaxe des
LOAD DATA INFILE
.
-
-F, --flush-logs
-
ƒcrit tout le fichier de log du serveur avant de commencer l'export.
-
-f, --force,
-
Continue même si une erreur SQL survient durant l'export.
-
-h, --host=..
-
Exporte les données depuis le serveur MySQL vers l'hôte indiqué.
L'hôte par défaut est
localhost
.
-
-l, --lock-tables.
-
Verrouille toutes les tables avant de commencer l'export. Les tables
sont verrouillées avec
READ LOCAL
pour permettre des insertions
concurentes sur les tables
MyISAM
.
Notez que lorsque vous exportes des tables de bases différentes, l'option
--lock-tables
va verrouiller chaque base séparément. Cette option
ne vous garantira pas que vos tables seront logiquement cohérente entre
les bases. Des tables de différentes bases pourraient être exportées dans
des états très différents.
-
-K, --disable-keys
-
/*!40000 ALTER TABLE tb_name DISABLE KEYS */;
et
/*!40000 ALTER TABLE tb_name ENABLE KEYS */;
seront ajoutés dans le résultat. Cela rendra les chargements de données
plus rapides sur les serveurs MySQL 4.0 car les index sont alors créés
après l'insertion de toutes les données.
-
-n, --no-create-db
-
CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name;
ne sera pas ajouté
dans l'export. Sinon, la ligne ci-dessus sera ajoutée, si l'une des options
--databases
ou
--all-databases
ont été activée.
-
-t, --no-create-info
-
N'écrit pas les informations de création de table (la requête
CREATE TABLE
).
-
-d, --no-data
-
N'écrit aucune ligne d'informations sur la atble. C'est très pratique si
vous voulez simplement exporter la structure de la table.
-
--opt
-
Identique à
--quick --add-drop-table --add-locks --extended-insert
--lock-tables
. Vous obtiendrez l'export le plus rapide à importer dans un serveur
MySQL.
-
-pyour_pass, --password[=your_pass]
-
Le mot de passe à utiliser lors de la connexion au serveur. Si vous spécifiez
en omettant la partie
'=your_pass'
,
mysqldump
vous demandera le mot de passe en ligne de commande.
-
-P port_num, --port=port_num
-
Le port TCP/IP à utiliser avec l'hôte. Ceci sert pour les connexions d'hôte à
hôte, autre que
localhost
, pour lequel les sockets Unix seront utilisées).
-
-q, --quick
-
Ne garde pas en buffer les requêtes, mais écrit immédiatement dans la sortie.
Utilise
mysql_use_result()
pour cela.
-
-Q, --quote-names
-
Protège les noms des tables et colonnes avec le caractère
'`'
.
-
-r, --result-file=...
-
Ecrit directemetn dans le fichier indiqué. Cette option doit être utilisé
sur MSDOS, car cela évite que la nouvelle ligne
'\n'
soient converties en
'\n\r'
(nouvelle ligne et retour chariot).
-
--single-transaction
-
Cette option ajoute la commande SQL
BEGIN
avant d'exporter les données
vers le serveur. C'est généralement pratique pour les tables
InnoDB
et le niveau d'isolation de transaction
READ_COMMITTED
, car ce mode va exporter l'état de la base au moment
de la commande
BEGIN
sans bloquer les autres applications.
Lorsque vous utilisez cette option, pensez bien que seules les tables
transactionnelles seront exportées dans un état cohérent, c'est à dire
que les tables
MyISAM
ou
HEAP
qui seront exportées
avec cette option, pourront changer d'état.
L'option
--single-transaction
a été ajoutée en version 4.0.2.
Cette option est mutuellement exclusive avec l'option
--lock-tables
car
LOCK TABLES
va valider une transaction interne précédente.
-
-S /path/to/socket, --socket=/path/to/socket
-
Le fichier de socket à utiliser lors de la connexion à
localhost
(qui est l'hôte par défaut).
-
--tables
-
Remplace l'option --databases (-B).
-
-T, --tab=path-to-some-directory
-
Crée un fichier
table_name.sql
, qui contient les commandes SQL CREATE,
et un fichier
table_name.txt
, qui contient les données, pour chaque table.
Le format du fichier
.txt
est celui qui est spécifié par les options
--fields-xxx
et
--lines--xxx
.
Note
: cette option ne fonctionne qui si
mysqldump
est exécuté
sur la même machine que le démon
mysqld
, et que le nom d'utilisateur et
le groupe de
mysqld
(normalement l'utilisateur
mysql
, et le groupe
mysql
)
doivent avoir des permission pour créer et écrire un fichier dans le dossier
que vous spécifiez.
-
-u user_name, --user=user_name
-
Le nom d'utilisateur MySQL lors de la connexion à un serveur distant.
La valeur par défaut est votre nom d'utilisateur Unix.
-
-O var=option, --set-variable var=option
-
Spécifie la valeur d'une variable. Les noms possibles des variables
sont spécifiés ci-dessous. Notez bien que
--set-variable
est obsolète depuis MySQL 4.0, il vous suffit alors d'utiliser la
syntaxe
--var=option
.
-
-v, --verbose
-
Mode détaillé. Affiche plus d'informations sur les faits et gestes
du programme.
-
-V, --version
-
Affiche la version du programme et quitte.
-
-w, --where='where-condition'
-
Exporte uniquement les lignes sélectionnées. Notez que les guillemets
sont obligatoires.
-
-X, --xml
-
Exporte la base au format XML.
-
-x, --first-slave
-
Verrouille toutes les tables dans les bases.
"--where=user='jimf'" "-wuserid>1" "-wuserid<1"
|
-
-O net_buffer_length=#, where # < 16M
-
Lors de la création de commandes d'insertions multilignes, (comme
avec l'option
--extended-insert
ou
--opt
),
mysqldump
va créer des lignes jusqu'à la taille de
net_buffer_length
. Si vous augmentez
cette valeur, vous devriez aussi vous assurer que la variable MySQL
max_allowed_packet
est plus grande que
net_buffer_length
.
L'usage normal de
mysqldump
est probablement de faire des sauvegardes
de bases. Sauvegardes de base de données .
mysqldump --opt database > backup-file.sql
|
Vous pouvez importer les données dans la base MySQL avec :
mysql database < backup-file.sql
|
ou
mysql -e "source /patch-to-backup/backup-file.sql" database
|
Cependant, il est très pratique pour remplir un autre serveur MySQL
avec des informations depuis une base :
mysqldump --opt database | mysql ---host=remote-host -C database
|
Il est possible d'exporter plusieurs bases de données en une seule commande :
mysqldump --databases database1 [database2 ...] > my_databases.sql
|
Si vous souhaitez exporter toutes les bases, vous pouvez utiliser :
mysqldump --all-databases > all_databases.sql
|
|