Voici un petit script (enfin, un cron) qui permet de sauvegarder automatiquement vos bases de données (légères !) dans leur repository github associé.
Le scénario est le suivant : vous avez 3 sites différents dans /var/www/html : site-1, site-2 et site-3
Ils ont chacun leur repo git associé.
Nous allons créer un dossier backup dans chaque repo et créer une tâche récurente (crontab) qui va sauvegarder les bases de données dans le repo, de la manière suivante .
- Créer un dump de la base du site-1 dans le dossier backup correspondant.
- Appliquer les droits www-data au dump
- Commiter le dump
Créez les dossiers de backup
mkdir -p /var/www/html/site-1/backups/
mkdir -p /var/www/html/site-2/backups/
mkdir -p /var/www/html/site-3/backups/
mkdir -p /var/www/html/backups/
Passez en root pour modifier le crontab
sudo su -
crontab -e
Ajoutez chaque site à sauvegarder, modifier l'heure (les 2 premiers paramètre, ici minuit) et le jour (le dernier paramètre, dimanche était le jour 0)
# Site 1 is backuped every Monday
0 0 * * 1 cd /var/www/html/site-1 && git pull && mysqldump --user=site-1-user --password="xxx" site-1-db > /var/www/html/site-1/backups/site-1-db_backup.sql && chown -R www-data:www-data /var/www/html/site-1/backups/ && git add ./backups/site-1-db_backup.sql && git commit -m "automatic backup of site-1" && git push
# Site 2 is backuped every Wednesday
0 0 * * 3 cd /var/www/html/site-2/ && git pull && mysqldump --user=site-2-user --password="yyy" site-2-db > /var/www/html/site-2/backups/site-2-db_backup.sql && chown -R www-data:www-data /var/www/html/site-2/backups/ && git add backups/site-2-db_backup.sql && git commit -m "automatic backup of site-2-db" && git push
# Site 3 is backuped every Tuesday
0 0 * * 2 cd /var/www/html/site-3/ && git pull && mysqldump --user=site-3-user --password="zzz" site-3-db > /var/www/html/site-3/backups/site-3-db_backup.sql && chown -R www-data:www-data /var/www/html/site-3/backups/ && git add backups/site-3-db_backup.sql && git commit -m "automatic backup of site-3-db" && git push
# All sites are backuped every Sunday
0 0 * * 0 cd /var/www/html && git pull && mysqldump --user=root --password="xyz" --all-databases > /var/www/html/backups/root-db_backup.sql && chown -R www-data:www-data /var/www/html/backups && git add /var/www/html/backups/root-db_backup.sql && git commit -m "automatic backup of root-db" && git push
C'est tout. Le crontab n'a pas besoin d'être redémarré, il est immédiatement actif.