fév 182012
 

Systeme de sauvegarde par le réseauFinalement un NAS, au dela du stockage doit aussi permettre de servir de système de sauvegarde. Alors lorsque l’on dispose d’un site internet, et même si l’on fait confiance à son hébergeur, il est prudent de disposer de plusieurs copies de son site.

Pour toutes sauvegardes, il est convenu que si celle ci n’est pas exercée automatiquement, elle finit par ne plus l’être du tout. Donc le challenge posé est d’automatiser le backup complet du contenu hébergé pour tout ramener sur le NAS et ensuite faire que ce contenu soit pris en charge par le système de sauvegarde du NAS déjà décrit.

Après quelques recherches sur internet, me disant que je ne devais pas avoir la primeur de l’idée, j’ai trouvé pas mal de réponses sur la manière de faire et j’ai fini par m’inspirer de plusieurs d’entre elles pour mettre en oeuvre ma solution.

Il faut donc sauvegarder les pages et les documents posés sur l’hébergement (donc du php, du html, des textes et des images etc.) mais aussi le contenu de la base Mysql qui contient, à la fois les données généalogiques mais aussi le contenu dynamique du blog. Ramener ces contenus automatiquement et sur une fréquence journalière sur les disques dur du NAS dans un nouveau répertoire partagé et enfin sauvegarder celui ci.

La solution est trés largement inspirée par les solutions décrites par Maël sur ce billet de cobestran.com  et sur celui la et aussi par King76 sur celui ci.

Elle repose sur l’utilisation de lftp pour effectuer des transferts de fichier de type miroir, en conservant donc à l’identique un répertoire du NAS par rapport au contenu du site distant. Attention, pour pouvoir utiliser lftp, il vous faut l’installer via IPKG.

Première étape donc installation de ipkg, Je vous laisse trouver un tuto pour installer ipkg ici par exemple.

Deuxième étape, vider la base de données coté hébergeur. La, je pense que la solution est dépendante de l’hebergeur et des outils qu’il met à disposition. Dans mon cas, OVH propose tout ce qu’il faut pour écrire un script permettant le vidage automatisé de la base de donnée.

Troisième étape : Rédaction du script permettant de transférer en mode miroir un certain nombre de répertoire du site vers le NAS et automatisation du déroulement de ce script.

Maintenant entrons dans le concret.

Etape 2 : Extraction de la base de donnée.

On écrit un tout petit script php que l’on va placer sur le serveur et exécuter tous les jours en ajoutant ce script dans le cron du serveur.

<?
$nomdestination        = "nomdestination".date("YmdHis").".sql";
$cmd = "mysqldump --host=mysqlx-xx --user=username --password=password databasename >".$nomdestination;
echo "Votre base est en cours de sauvegarde ...<br />";
echo $cmd;
system($cmd);
echo "<br />C'est fini. Vous pouvez recuperer la base par FTP<br />";
echo "<br />le fichier se nomme : ".$nomdestination;
?>

il faut bien entendu remplacer mysqlx-xx par le nom du serveur contenant la base de donnée, username par nom du user autorisé à accéder à la base, password par le … mot de passe ;-) et databasename par le nom de votre base de donnée.

Reste à planifier l’exécution du script chez l’hébergeur que vous aurez choisi.

A ce moment, tous les jours à l’heure choisie, une extraction de la base de donnée sera faite et stockée dans le répertoire indiqué dans le script.

Etape 3 : Ramener depuis l’hébergeur les données à sauvegarder sur le NAS.

Cette fois le script sera écrit en Shell et s’exécutera sur le NAS. Le script lit un fichier contenant la liste des répertoires à ramener et ensuite utilise lftp pour faire des miroirs successifs des répertoires choisis. Bien sur, ne pas oublier le répertoire dans lequel on a extrait la base de donnée.

#!/bin/sh
######################################################################################
##### Sauvegarde des repertoires des sites web depuis l'Hebergement
####  Les repertoires a sauvegarder sont contenus dans le fichier repertoires2
####  Ce n'est pas une sauvegarde incrementale mais un miroir
######################################################################################

# CONFIGURATION
ficLog=/volume1/documents/logsvg2_ovh.txt
servFTP=NOMSERVEURFTP
userFTP=USERFTP
passFTP=PASSWORDFTP
repIgnore="-x wp-content/cache -x /wp-content/supercache"
MAIL_FR=/usr/syno/synoman/webman/texts/fre/mails

######################################################################################
# debut shell
######################################################################################
echo "+-- Deb Sauvegarde $(date) ---" >> ${ficLog}
cp /usr/syno/synoman/webman/texts/fre/mails /usr/syno/synoman/webman/texts/fre/mails.orig
##
echo "
[BackupGood]
Subject: Mirroring depuis OVH
" >> $MAIL_FR
##
while read ligne
do
## Temps d'execution du script
START=$(date +%s)
set $(echo $ligne)
repFTP="/www/"$ligne"/"
repLocal="/volume1/Sauvegarde_OVH/"$ligne"/"

# commande de copie miroir ftp vers local
/opt/bin/lftp ftp://${userFTP}:${passFTP}@${servFTP} -e "mirror -e ${repIgnore} ${repFTP} ${repLocal} ; quit" >> ${ficLog}
echo "/opt/bin/lftp ftp://"${userFTP}":"${passFTP}"@"${servFTP}" -e mirror -e" ${repIgnore} ${repFTP} ${repLocal}" ; quit " >> ${ficLog}

## Afficher le temps d'execution
STOP=$(date +%s)
RUNTIME=`expr $STOP - $START`

res=$?
echo "Resultat : "${res} >> ${ficLog}
echo "Duree Execution : "$RUNTIME >> ${ficLog}
if [ ${res} -eq 0 ]
then
echo -n " Pour $ligne le $(date +"%d-%m-%Y a %H:%M")" >> $MAIL_FR
printf " Mirror realise en %02d:%02d:%02d \n" $((RUNTIME/3600)) $((RUNTIME/60%60)) $((RUNTIME%60)) >> $MAIL_FR

else
echo -n " Pour $ligne : " >> $MAIL_FR
printf "Mirror en echec : Code erreur : %s \n" $res >> $MAIL_FR
fi
done < /volume1/@script/repertoires2

# fin shell
echo "--- Fin Sauvegarde $(date) ---" >> ${ficLog}
/usr/syno/bin/synomail BackupGood
sleep 3
cp /usr/syno/synoman/webman/texts/fre/mails.orig /usr/syno/synoman/webman/texts/fre/mails
######################################################################################

La commande Synomail est utilisée pour donner le resultat final de l’ensemble des transferts.

Le texte des mails envoyé par la commande synomail (qui envoie le mail mais adresse aussi le système de notification du desktop synology), est configuré dynamiquement tout au long du script. Au début on copie le fichier contenant les modèles pour le sauvegarder, puis à chaque répertoire sauvegardé on ajoute les lignes au bout du fichier avec un index « BackupGood » et une fois l’ensemble des répertoires traités, on utilise la commande Synomail avec ce même index pour faire la notification.

Après un délai d’attente (sleep 3) pour laisser le temps d’envoyer le message, le fichier original des modèles est remis en place. Pour pouvoir éventuellement débugguer un soucis, je crée en parallèle un fichier de logs avec une copie de la commande exécutée.

  (vu 523 fois)

 Laisser un commentaire

(requis)

(requis)

Vous pouvez utiliser ces tags et attributs HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>