Carnet Wiki

Mutualisation et sauvegardes

Version 2 — Août 2007 ben

Maintenant qu’on a un plugin facilitant la Mutualisation, on veut pouvoir répliquer les sites mutualisés d’un serveur vers un autre, dans le but de :
-  avoir des sauvegardes automatiques prêtes à repartir en cas de problème
-  faire des essais dans une copie fraîche d’un site « en production »
-  ne pas laisser un site reposer sur les épaules d’un seul administrateur

1. Mise en place des outils

Les outils sont :
-  le plugin de mutualisation
-  l’utilitaire rsync
-  l’utilitaire mysqldump

2. Installation du module de sauvegarde

On administre alanbox ; on souhaite autoriser bennybox à sauvegarder sur alanbox.

Installer rsyncd sur alanbox :
root@alan# apt-get install rsyncd

Choisir un chemin pour les sauvegardes de la bennybox, et le créer/vérifier qu’il existe ; exemple pour AlternC :
root@alan# ls /var/alternc/html/b/bennybox

Dans ce répertoire on créera deux sous-répertoires :
-  spip/ accueillera la copie du spip mutualisé ainsi que ses sous-répertoires sites/ et plugins/.
-  sql/ recevra les dumps des bases de données.

Configurer rsyncd pour lui ajouter un module bennybox :

root@alan# edit /etc/rsyncd.conf

[bennybox]
        uid = www-data
        gid = 2036
        use chroot = yes
        path = /var/alternc/html/b/bennybox
        auth users = bennybox
        secrets file = /etc/rsyncd.secret
        read only = no

Ici www-data et 2036 sont respectivement l’utilisateur et le groupe sous lequel il faudra enregistrer les fichiers sauvegardés.

Dans /etc/rsyncd.secret ajouter une ligne avec son mot de passe :
bennybox:987654

3. Envoi des fichiers vers le serveur de sauvegarde

La première fois, créer un fichier de mot de passe : dans /home/ben/rsync.passwords/alanbox écrire 987654 ; puis faire
ben@bennybox> chmod 600 /home/ben/rsync.passwords/alanbox

ben@bennybox

ben@bennybox > rsync -azv --exclude "*/tmp/*" --exclude "*/local/*" \
  --password-file=/home/ben/rsync.passwords/alanbox \
  /chemin/vers/spip/ \
  rsync://bennybox@alanbox.tld/bennybox/spip/
</cadre </code >


Ici on doit voir l'ensemble des fichiers du répertoire <code>spip/

de la bennybox se backuper dans le répertoire /var/alternc/html/b/backup/bennybox/spip/ sur alanbox ; à l’exception des fichiers contenus dans les répertoires sites/*/tmp/ et sites/*/local/.

Tous les fichiers seront recopiés, y compris ceux de SPIP et ses plugins, ce qui permettra au backup d’être réellement complet. Si on veut ne sauvegarder que le répertoire sites/, il faut modifier un peu la commande :

ben@bennybox> rsync -azv --exclude "*/tmp/*" --exclude "*/local/*" \
  --password-file=/home/ben/rsync.passwords/alanbox \
  /chemin/vers/spip/sites/ \
  rsync://bennybox@alanbox.tld/bennybox/spip/sites/

4. Dump des bases de données

Un script de backup, à faire tourner en tant que root (http://sh.nu/p/22568), permet de sauvegarder chaque table de chaque base de données, en évitant toutefois les énormes (et inutiles) tables d’indexation.

Le résultat se présente sous la forme suivante :

root@bennybox# ls /var/state/mysql/
alternc/         spip/         truc/
zope/


root@bennybox# ls /var/state/mysql/spip/
spip_articles.sql.gz    spip_breves.sql.gz ....

5. Sauvegarde des dump de bases de données

Il faut exporter toutes les tables pertinentes vers alanbox ; bien entendu il faut filtrer, pour ne pas exporter les tables qui ne concernent pas SPIP.

Si on a opté pour une mutualisation avec une seule base de données, et des préfixes de table différents, on s’intéressera, dans le répertoire /var/state/mysql/, à tout ce qui est de la forme spip/*.

A l’inverse si on a opté pour des bases différentes, préfixe spip_, on pourra choisir d’exporter */spip_*.

D’autres cas de figure sont possibles, notamment, si toutes les bases mutualisées ont le même préfixe mutu_ : mutu_*/*

Quoi qu’il en soit, il faut établir cette liste, puis demander à rsync de la sauvegarder sur alanbox. A cause des particularités de rsync, il faut procéder en deux temps :

root@bennybox# cd /var/state/mysql/
root@bennybox/var/state/mysql/# ls mutu_*/*
mutu_site1/spip_articles.gz ....
root@bennybox/var/state/mysql/# rsync -avvR --delete \
   mutu_*/*  \
   --password-file=/home/ben/rsync.passwords/alanbox \
   rsync://bennybox@alanbox.tld/bennybox/sql/

* *

Une petite pause, on se projette sur alanbox et on observe le résultat :

root@bennybox# ssh alan@alanbox
alan@alanbox> cd /var/alternc/html/b/bennybox/ ; tree
spip/
     spip.php   etc
     sites/
             tetris.scriibe.net/
                                       IMG/
                                       config/
             zargla.scriibe.net/
                                       IMG/
                                       config/
...
sql/
     tetris/
              spip_articles.gz
              spip_breves.gz
     zargla/
              spip_articles.gz
              spip_breves.gz
...

6. Faire un cron

Une fois que ça marche, il suffit de mettre les commandes dans la crontab (À rédiger)

7. Faire la ronde

Maintenant qu’on sait exporter les sites de bennybox vers alanbox, on procède dans le sens inverse pour avoir un backup partagé. On peut s’y mettre à 3, 4, 5...

Attention à ne pas écraser un site en production !

8. En cas de besoin

Si on a besoin d’activer un des sites sauvegardés, comment procéder : (À rédiger)