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
modifierPour 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
modifierPour 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
modifiermysql -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...
modifierL'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
modifierPour 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
modifierPour 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
modifierPour 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
modifierEn 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'