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
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 = 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
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
...
cron
Une 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)