MySQL/mysqldump
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
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'