MySQL/mysqldump

Un livre de Wikilivres.

mysqldump peut sauvegarder des bases de données MySQL. Son fonctionnement est particulièrement intéressant car elle génère les commandes SQL permettant de re-créer la base de données sur un autre serveur, ou d'exporter les données vers du CSV et du XML.

Backup[modifier | modifier le wikicode]

Pour exporter la base de donnée « myBase », on utilise la commande suivante :

 mysqldump -u root -p myBase > myBase_backup.sql

Ceci fera l'export dans un fichier « myBase_backup.sql ».

Exemple de dump d'une base :

mysqldump --user=root --password=mon_mdp ma_base > my_base.sql

Pour dumper toutes les bases :

mysqldump --user=root --password=mon_mdp --all-databases > all_db.sql

Pour dumper certains enregistrements de certaines tables :

mysqldump --database ma_base --tables ma_table --where="id in (1, 2, 3)" --user=root --password=mon_mdp > my_query.sql
Sans les données[modifier | modifier le wikicode]

Pour ne récupérer que le schéma :

mysqldump -f --no-data --user=root --password=mon_mdp ma_base > my_base_schema.sql
Au format CSV[modifier | modifier le wikicode]
mysql -e "select * from ma_base.ma_table where id in (1, 2, 3)" --user=root --password=mon_mdp > my_query.csv
Aux formats Oracle, PostgreSQL, Microsoft SQL Server...[modifier | modifier le wikicode]

L'option --compatible permet de spécifier à mysqldump le format à utiliser pour être compatible avec les bases de données existantes. Exemple :

mysqldump --compatible=oracle -u root -p myBase > myBase_backup.sql

Cette option peut prendre les valeurs suivantes : ansi, mysql323, mysql40, postgresql, oracle, mssql, db2, maxdb, no_key_options, no_table_options, or no_field_options


Tâche planifiée[modifier | modifier le wikicode]

Pour définir le backup automatique d'une base tous les soirs à minuit[1], sous Linux :

 $ crontab -e
0 0 * * * /usr/local/bin/mysqldump -uLOGIN -PPORT -hHOST -pPASS base1 | gzip -c > `date “+\%Y-\%m-\%d”`.gz

Le fichier décompresser est au format SQL et peut donc être exécuter pour recréer les bases, tables, et insérer les enregistrements.


Restauration[modifier | modifier le wikicode]

Pour importer une base de données sauvegardée via mysqldump, on utilise la commande cliente mysql et une redirection en entrée :

# mysql -u root -p myBase < myBase_backup.sql

Logo

En cas de gros volume, il est plus rapide de copier les .bin des bases, au lieu d'utiliser mysqldump.

Préparation[modifier | modifier le wikicode]

Pour réinjecter le dump dans d'autres bases, il vaut mieux nettoyer la base de destination[2].

 mysqladmin drop -f base2
 mysqladmin create base2
 mysqldump --opt base1 | mysql base2
Vers une base distante[modifier | modifier le wikicode]

En utilisant mysqldump et ssh, on peut dupliquer une base de données sur une machine distante :

 mysqldump testdb -p''<mot de passe local>'' | ssh pc211 'echo "create database dbalex;" | mysql -p''<mot de passe distant>'' ; cat - | mysql -p''<mot de passe distant>'' dbalex'


Références[modifier | modifier le wikicode]