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éeAPP_DUMPDIR pointe vers le répertoire où on désire sauvegarder les dumpsOn peut pkgiser le script de cette façon :
pkgi/monmodule/bin/sauvegarder-base-de-donnees <?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"
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
./bin/pkgi-mysqltools backup