Version 2 — August 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
Les outils sont :
- le plugin de mutualisation
- l’utilitaire rsync
- l’utilitaire mysqldump
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 = noIci 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
La première fois, créer un fichier de mot de passe : dans /home/ben/rsync.passwords/alanbox écrire 987654; puis faireben@bennybox> chmod 600 /home/ben/rsync.passwords/alanbox
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/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 ....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
...cronUne fois que ça marche, il suffit de mettre les commandes dans la crontab (À rédiger)
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 !
Si on a besoin d’activer un des sites sauvegardés, comment procéder : (À rédiger)