Base :
Lorsque l’on administre un serveur web (sous Linux), tôt où tard on se retrouve confronté à la nécessité de faire la sauvegarde d’une ou plusieurs bases de données MySQL.
Le script suivant permet de minimiser les répétitions : il réalise le dump au format bzip2 de la base de données dont on a passé le nom en paramètre. Le dossier de destination est configurable dans le script.
- #!/bin/bash
- # mydump.sh
- # script pour dump + bzip2 d'une bdd
- # le nom de la bdd est passé en paramètre au script
- # exemple: ./mydump.sh la_base_a_dumper
- # configuration
- # chemin du dossier de stockage des dumps
- CHEMIN_DUMPS=/home/technique/dumps_sauvegardes
- # nom et mot de passe de l'utilisateur MySQL
- USER_MYSQL=toto
- PASS_MYSQL="super_secret"
- # creer la base de donnees: utiliser -B comme parametre
- echo "dump + gzip de $1 dans $CHEMIN_DUMPS/$1.sql.bz2"
- mysqldump -u $USER_MYSQL --password=$PASS_MYSQL -B --opt $1 | bzip2 -c -1 > $CHEMIN_DUMPS/$1.sql.bz2
A lancer dans un tmux (ou screen) si vos bases sont grosses et/ou votre connexion ssh peu fiable...
Pour la restauration d’un ensemble de sauvegardes bzippés, voir Myextract : un script pour restaurer un ensemble de dumps MySQL
Pour aller plus loin :
On peut vouloir automatiser un peu plus la sauvegarde en passant un fichier listant toutes les bases à sauver, fichier généré à partir de la liste des bases présentes sur le serveur.
Le scénario "évolué" pourrait donc être :
- générer le fichier liste_bases.txt listant toutes les bases :
- mysql -utoto -p"super_secret" -e 'show databases;' > liste_bases.txt
Le fichier obtenu liste l’ensemble des bases présentes, une par ligne.
- éditer le fichier et enlever les bases qui ne sont pas à sauvegarder (phpmyadmin, performance_schema, mysql...)
- lancer mydump.sh en boucle sur toutes les tables restant dans le fichier liste_bases.txt :
- for i in `cat liste_bases.txt`;do ./mydump.sh $i;done