Script shell de backup sql, svn pour serveur de dev

On pense souvent à automatiser les backups de son serveur de production mais on oublie facilement sa machine de développement. Il n'est peut être pas trés important de sauvegarder les bases de données mais il n'en est pas de même pour les dépots svn et git. Si votre serveur de prod peut cracher, votre serveur ou PC de développement aussi.

 

Jusqu'à présent, j'utilisais à tort la même stratégie de sauvegarde pour mon serveur de prod et mon serveur de dev. Pourquoi à tort? Car faire une sauvegarde journalière à heure fixe, n'est pas une bonne idée lorsque que l'on ne dev pas tous les jours et surtout qu'on ne laisse pas sa machine allumer 24/24. Même si mon eeebox n'a besoin que de 20W, sur l'année ça ferait une belle consommation inutile de la laisser allumée tout le temps.
J'ai donc revue ma stratégie et mes scripts. Ne pouvant déterminer à l'avance à quelle heure mon serveur de dev sera allumé, je lance la sauvegarde toutes les heures. Et bien sur pour ne pas refaire une sauvegarde déjà faite, j'ai ajouté un test si le fichier de destination existe ou non.

 

Sauvegarde des bases de données MySQL

#!/bin/bash
 
#date du jour
DATE=`date +%y_%m_%d`
 
#liste des bases
LISTEBDD=$( echo 'show databases' | mysql -uroot -pxxxx)
 
for SQL in $LISTEBDD
 
do
 
  if [ $SQL != "information_schema" ] && [ $SQL != "mysql" ] && [ $SQL != "Database" ]; then
 
    if [ -e /home/backup/sql/$SQL"_mysql_"$DATE.sql.gz ]; then
 
      #exit
 
    else
 
      mysqldump -uroot -pxxxx $SQL | gzip > /home/backup/sql/$SQL"_mysql_"$DATE.sql.gz
 
    fi
 
  fi
 
done
 
 

J'ai ajouté le test pour chacune des bases de données, pour gèrer le cas où j'éteindrai le serveur avant que toutes les bdd ne soient sauvegardées. Si vous n'êtes pas intéréssé par cette option il suffit de retirer le # devant la commande "exit".
La liste des bdd est obtenue par la requête "show database" spécifique à MySQL.

 

Sauvegarde du dépot SVN

#!/bin/bash
 
#date du jour
DATE=`date +%y_%m_%d`
 
#liste des dossier
LISTEDIR=$(ls  /var/svn/)
 
#on boucle sur chaque dossier
for DOSSIER in $LISTEDIR
do
  if [-e /home/backup/svn/$DOSSIER"_svn_"$DATE.gz ]; then
    #exit
  else
    svnadmin dump /var/svn/$DOSSIER | gzip  > $DOSSIER"_svn_"$DATE.gz && mv $DOSSIER"_svn_"$DATE.gz /home/backup/svn
  fi
done
 

J'ai construit ce script sur le même modèle que celui pour les bdd. La liste des dépots est obtenue en listant le contenu du dossier "/var/svn".

Il ne reste plus qu'à ajouter ces 2 scripts à la liste crontab avec une éxecution toutes les heures ou autres suivant votre utilisation.

 > crontab -e

Puis on ajoute les lignes:

0 * * * * sh /root/backup_mysql.sh
0 * * * * sh /root/backup_svn.sh

 

On pourrait aussi lancer les scripts au démarrage ou à l'extinction de la machine. Et bien entendu il faudrait stocker les fichiers sur une autre machine, un disque externe ou idéalement un NAS.

Ajouter un commentaire