Carnet Wiki

Mutualisation et sauvegardes

Version 5 — Octobre 2007 NicolasR

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, La mutualisation facile : modifications manuelles
-  l’utilitaire rsync (s’installe sous Debian avec apt-get install 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
        # hosts allow = 1.2.3.4

Ici www-data et 2036 sont respectivement l’utilisateur et le groupe sous lequel il faudra enregistrer les fichiers sauvegardés. (La ligne hosts allow = IP permet d’accroître la sécurité en exigeant une vérification du numéro IP du client.)

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 modifier les droits de ce fichier de façon à ce que personne ne puisse le lire en-dehors de l’utilisateur qui est censé l’utiliser :
ben@bennybox> chmod 600 /home/ben/rsync.passwords/alanbox

A partir de là une sauvegarde s’effectue avec cette commande :

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

Ici on doit voir l’ensemble des fichiers du répertoire 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 --delete --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)

Crontab

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 (mon-site), comment procéder :

a. repérer les contenus nécessaires
-  les fichiers spip/sites/mon-site/
-  les tables sql/mon-site/spip_*.gz
-  éventuellement, les fichiers de spip et l’arborescence de plugins associés.

b. remonter les éléments sur un nom de domaine temporaire
-  soit à l’identique (attention à ce que les noms des bases de données soient compatibles avec les vôtres)
-  soit en adaptant la structure, si celle de la alanbox ne correspond pas à celle de la bennybox

c. installer le nom de domaine définitif