Comment sauvegarder simplement sa base de données mysql ?

L'objectif est de créer un script qui va générer un dump des bases de données mysql sans les tables systèmes information_schema et mysql car ces tables peuvent gêner la restauration d'un futur dump. Les noms des bases de données à sauvegarder n'ont pas besoin d'être indiquées ce qui est un gros avantage car on peut utiliser le même script pour plusieurs applications totalement différentes.

Par ailleurs, lorsqu'un problème surgit, il peut être utile de restaurer un dump d'il y a N jours. Voila pourquoi 7 fichiers dump-xxx.sql.gz seront générés où xxx sera remplacé par une abréviation du jour de la semaine. Dans cet exemple, on boucle donc sur 7 jours mais cette limite peut-être ajustée en modifiant le format +%a dans le script.

Voici le script qui réalise cette opération :

#!/bin/bash
APP_HOME=~
APP_DUMPDIR=~
APP_BASES=`echo "SHOW DATABASES;" | $APP_HOME/usr/bin/mysql \
                       | grep -v "^Database$" \
                       | grep -v "^information_schema$" \
                       | grep -v "^mysql$"`
$APP_HOME/usr/bin/mysqldump --databases $APP_BASES | gzip > "$APP_DUMPDIR/dump-`date +%a`.sql.gz"
  • APP_HOME pointe vers la racine de l'application pkgi déployée
  • APP_DUMPDIR pointe vers le répertoire où on désire sauvegarder les dumps

On peut pkgiser le script de cette façon :

  1. en le plaçant dans pkgi/monmodule/bin/sauvegarder-base-de-donnees
  2. en le modifiant comme ceci :
    <?php echo '#!/bin/bash'; ?> 
    APP_HOME=<?php echo getenv('APPNAME_HOME'); ?> 
    APP_DUMPDIR=<?php echo getenv('APPNAME_HOME'); ?> 
    APP_BASES=`echo "SHOW DATABASES;" | $APP_HOME/usr/bin/mysql \
                           | grep -v "^Database$" \
                           | grep -v "^information_schema$" \
                           | grep -v "^mysql$"`
    $APP_HOME/usr/bin/mysqldump --databases $APP_BASES | gzip > "$APP_DUMPDIR/dump-`date +%a`.sql.gz"
  3. en rajoutant ce fichier pkgi/monmodule/etc/cron.d/sauvegarder-base-de-donnees qui permettra de l'exécuter par crontab toutes les nuits à 1h du matin :
    0 1 * * * <?php echo getenv('APPNAME_HOME'); ?>/bin/sauvegarder-base-de-donnees

Ce script est intégré en natif à pkgi depuis sa version 2.35. Il est utilisable très simplement de cette façon :

./bin/pkgi-mysqltools backup

 
faq/mysql-backup.txt · Dernière modification: 2010/11/07 19:20 par kerphi
Recent changes RSS feed Powered by PHP Hosted on Debian Driven by DokuWiki Deployed by Pkgi