J’utilise un serveur SVN (pas encore eu le temps ni le courage de passer à GIT) pour gérer en version mes configurations, mes scripts shell et mes petits développements personnels. Une erreur de manipulation étant vite arrivée, j’ai automatisé l’archivage journalier (avec une mémoire d’une semaine) de la base de donnée utilisée par SVN.
Sauvegarde
J’utilise pour cela la commande svnadmin qui permet à l’aide de l’option dump de copier dans un simple fichier le contenu de la base de donnée.
Par exemple pour sauvegarder le projet dont la racine SVN se trouve dans le répertoire /var/svn/monbeauprojet, il faut saisir la commande suivante:
svnadmin -q /var/svn/monbeauprojet > /backup/svn/monbeauprojet.svndump
Il est bien sûr conseillé d’avoir une sauvegarde sur un disque différent de celui montée par /var/svn ou encore mieux d’uploader la sauvegarde sur un autre serveur.
Script pour sauvegarder l’ensemble des projets
Si votre serveur SVN comporte plusieurs projets, il faut passer par un shell script:
# Backup SVN (local)
day=`LANG=C date +%A | tr A-Z a-z`
svnrepo=”/var/svn/”
backupdir=”/backup/svn”
for i in `ls $svnrepo`
do
svnadmin -q dump $svnrepo/$i > $backupdir/$i-$day.svndump
gzip $backupdir/$i-$day.svndump
rm $backupdir/$i-$day.svndump
done
Ce script va produire dans le sous répertoire /backup/svn une liste de fichiers compressés (format gzip). Chaque projet aura 7 sauvegardes correspondant aux 7 derniers jours. Par exemple, le fichier nommé monbeauprojet-sunday.svndump.gz sera la sauvegarde de la base de données SVN de dimanche dernier.
Pour lancer automatiquement la sauvegarde il suffit d’ajouter ce script dans la crontab système.
Restauration
En cas de problème sur un projet, il suffit de saisir les commandes suivantes pour restaurer la base de données. On utilise également la commande svnadmin mais cette fois ci avec l’option load:
gzip -d /backup/svn/monbeauprojet-sunday.svndump.gz
svnadmin load /var/svn/monbeauprojet < /backup/svn/monbeauprojet-sunday.svndump
Il faut bien vérifier que les droits des sous répertoires sont bons (svn:svn pour mon Ubuntu Server).
Si la restauration se fait sur un nouveau serveur SVN, il faut penser à créer le répertoire avec la commande:
svnadmin create /var/svn/monbeauprojet
Conclusion
Il y a surement d’autres solutions techniques (par exemple faire une copie sur un deuxième serveur SVN avec la commande svnadmin hotcopy) mais je trouve cette solution plutôt simple et flexible.