Rien de tel qu’un bon petit plat pour ces fêtes de fin d’année! Voici une petite recette qui vous permettra de sauvegarder les sites et bases de données présents sur votre serveur de manière automatisée.
Il vous faudra bien évidemment un serveur de destination sur lequel copier vos fichiers à sauvegardés.
On fera les tansfers à la sauce scp (plutôt qu’ftp) pour plus de sécurité.
La réalisation est assez rapide. Après, il ne vous restera plus qu’à savourer!
Durée de cuisson: 10 minutes
Matériel / ustensiles nécessaires:
– Un ordinateur + clavier + souris, le tout connecté à Internet
– Un serveur contenant vos sites Web
– Un serveur de sauvegarde avec accès ssh
– Un compte utilisateur backup sur serveur de sauvegarde
Ingrédients (pour 1 serveur):
– Des répertoires et bases de données à sauvegarder
– Quelques lignes de commandes shell
– Une clé publique pour la sauce SCP
– Un peu de cervelle de webmaster
Préparation:
1) Avant de commencer toute chose, nous allons bien préparer notre sauce SCP pour que le mélange soit onctueux (mais surtout pour que le transfert automatisé fonctionne). Nous allons utiliser le serveur sur lequel se trouvent les données à sauvegarder.
[sourcecode language= »bash »]
#on génère une clé publique
ssh-keygen -t dsa -b 1024
#Tapez [Enter] à chaque question pour utiliser les paramètres par défaut
[/sourcecode]
[sourcecode language= »bash »]
#on copie la clé publique sur le serveur distant pour que le script se connecte sans mot de passe par la suite
ssh-copy-id -i ~/.ssh/id_dsa.pub USERBACKUP@SERVEURDISTANT
#Modifiez les valeurs USERBACKUP et SERVEURDISTANT bien évidemment en mettant les accès de votre serveur de sauvegarde (ip + username)
[/sourcecode]
Notre sauce SCP est prête.
2) Versez le code du paragraphe ci-dessous dans un éditeur de texte. Modifiez les variables USER, PASS, HOST, REPERTOIRE, NOMFICHIERAGENERER, USERBACKUP et SERVEURDISTANT. Laissez reposer (sauvegarder plutôt). Déplacez le code obtenu sur votre serveur serveur Web bien beurré dans le fichier /etc/cron.daily/backup en veillant à bien à faire un chmod 700 /etc/cron.daily/backup pour les plus gourmands (regards indiscrets).
[sourcecode language= »bash »]
#!/bin/sh
#on déclare les variables
USER="utilisateurmysql"
PASS="motdepassmysql"
HOST="localhost"
REPERTOIRE="/var/www"
NOMFICHIERAGENERER="mesuperwebsites"
USERBACKUP="utilisateur backup sur serveur sauvegarde"
SERVEURDISTANT="ip serveur sauvegarde"
#On ne touche plus à rien ici 🙂
TAR=$(which tar)
MYSQL=$(which mysql)
MYSQLDUMP=$(which mysqldump)
NOW=$(date +%d-%m-%Y)
#creation d’un répertoire de travail
BACKUP="/home/tempbackup"
if [ ! -d $BACKUP ]; then
mkdir $BACKUP
chmod 600 $BACKUP
fi
# on fait un dump de toutes les bases MySQL dans un fichier tar.gz
DATABASES=$($MYSQL -u $USER -h $HOST -p$PASS -Bse ‘show databases’)
for bdd in $DATABASES
do
$MYSQLDUMP –opt -c -u $USER -p$PASS $bdd > $BACKUP/$bdd.sql
done
$TAR -cPhzf $BACKUP/Bases-SQL-$NOW.tar.gz $BACKUP/*.sql
rm -f $BACKUP/*.sql
#on compresse les répertoires
$TAR -cPhzf $BACKUP/Repertoires-$NOW.tar.gz $REPERTOIRE
#on regroupe les dumps MYSQL et la sauvegarde des répertoires en 1 fichier
TAR -cPhzf $BACKUP/$NOMFICHIERAGENERER-`date +%A`.tar.gz $BACKUP/*
rm -f $BACKUP/Repertoires-$NOW.tar.gz
#on envoie le tout via la commande SCP
scp $BACKUP/*.* $USERBACKUP@$SERVEURDISTANT:~/
# on supprime les fichiers temporaires
rm -f $BACKUP/*.*
[/sourcecode]
Mettez au four et laissez cuire 🙂
Vous n’avez rien compris? moi non plus.
Cette recette a été inspirée de celle ci http://faq.1and1.fr/serveurs/linux/sauvegarde/11.html. Comme je la trouvais un peu fade, je l’ai modifiée! Vite, je retourne sur le plateau de M@sterChef ^^