Mydump : un petit script pour sauvegarder des bases de données au format bzip2

But du script : réaliser la sauvegarde de bases de données au format bzip2 (utilitaire pour migration de serveur).

, par clem

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.

  1. #!/bin/bash
  2.  
  3. # mydump.sh
  4. # script pour dump + bzip2 d'une bdd
  5. # le nom de la bdd est passé en paramètre au script
  6. # exemple: ./mydump.sh la_base_a_dumper
  7.  
  8. # configuration
  9. #  chemin du dossier de stockage des dumps
  10. CHEMIN_DUMPS=/home/technique/dumps_sauvegardes
  11. #  nom et mot de passe de l'utilisateur MySQL
  12. USER_MYSQL=toto
  13. PASS_MYSQL="super_secret"
  14. # creer la base de donnees: utiliser -B comme parametre
  15.  
  16. echo "dump + gzip de $1 dans $CHEMIN_DUMPS/$1.sql.bz2"
  17. mysqldump -u $USER_MYSQL --password=$PASS_MYSQL -B --opt $1 | bzip2 -c -1 > $CHEMIN_DUMPS/$1.sql.bz2

Télécharger

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 :
    1. 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 :
    1. for i in `cat liste_bases.txt`;do ./mydump.sh $i;done