12

Recette du jour: Backup de sites Web au shell sauce SCP

script shell de sauvegarde mysql repertoiresRien 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.

#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
#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)

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).


#!/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/*.*

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 ^^

12 commentaires

  1. C’est à quelques petites diffs le script que j’utilise 😉 je n’installe plus de serveur FTP sur mes serveurs car il y a trop de risque au niveau sécu. Pour aller plus loin je fais même mes mises à jour WP (core et plugins) en ssh …

  2. Je te conseil de regarder du cotés de unison pour tout ce qui synchro de fichier. C’est top 😉 (A utiliser à la place de scp ;))

  3. Bien ça, dis donc, sympa comme recette de Noël !
    Bon par contre, tu me donnes mal au crâne avec tes articles, là… tu donnerais pas plutôt des cours du soir ?

    • Why not, ça pourrait s’organiser! 😉 le soucis, c’est que ce genre de lignes de code en soirée, j’ai peur que ça empire le mal de crâne…

      • Meuh non…
        Si c’est tout ce que t’as trouvé pour pas avoir à me dire non, je te félicite pas !

        • non, c’est plutôt pour pas avoir à te dire oui :p J’ai peur de Mr Stick moi, et puis faut que ma femme soit d’accord aussi, encore le SEO… C’est pas toi qui disait que vie perso et SEO était une équation compliquée d’ailleurs?

          • T’as bien raison d’avoir peur, il est très très méchant !
            Sinon, effectivement pour l’équation compliquée donc proposes-tu des cours en journée alors ?

  4. Je suis tombé sur site par hasard via un partage d`un profil twitter et j`ai beaucoup aimé l`article.

    Pour être franc, j`avoue que sur le début, j`ai connu quelques difficultés à continuer,n’étant pas très calé sur le ssh. Merci pour le petit tuto, je vais essayer de bien comprendre pour changer mes habitudes

  5. Oups, Tecos comme article 😉

    Cela me donne une petite idée. Encapsuler le tout dans une classe PHP.
    Ainsi on peut envisager une “zoli” interface pour l’administration.

    Il peut aussi être envisageable d’utiliser la commande rsync en lieu et place de rcp permettant ainsi une synchronisation de fichiers.

  6. Merci pour l’astuce, j’ai déjà mes backups en rsync pour les fichiers et je devais recoder un meilleur script pour sauvegarder mes DB, le voici !

    Continue ainsi ton blog, c’est une bonne référence 😉

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *