Noobunbox

Sauvegarder un site et sa base sql via un script shell

Comment sauvegarder un site et sa base sql ? Qui ne s’est jamais posé la question, moi la première fois que j’en ai ouvert un et je me suis rapidement rendu compte que j’aurais du (j’étais beaucoup plus jeune donc cela peut peut être se comprendre).

Quand l’hébergeur a fermé sans préavis (si si ça arrive) j’étais un peu dégoutté mais dans un sens j’étais aussi coupable que lui était honnête. Même si depuis je choisis un peu plus consciencieusement mon hébergeur, il reste très important de pouvoir sauvegarder un site et sa base sql parce que :

Si votre site est basé sur un CMS vous devriez pouvoir trouver votre bonheur via un plugin, cependant si comme moi votre site est hébergé sur un vps / serveur dédié (aussi possible si votre hébergeur met à votre disposition un accès ssh) je préfère utiliser un petit script qui tourne quotidiennement via cron.

 

 

L’environnement

Avant de directement partir sur le détails du script et de son exécution je partirai du principe que :

Commençons par créer les répertoires détaillés ci-dessus

mkdir ~/scripts
mkdir ~/backups

 

Créons le fichier qui contient le script et rendons le exécutable

touch backup.script
chmod +x backup.script

 

 

Définition des variables

Nous allons commencer par définir les variables de base servant à l’exécution du script :

Ouvrez le fichier backup.script et collez le texte suivant

#!/bin/bash
NOW=$(date +"%Y-%m-%d-%H%M")
FILE="example.org.$NOW.tar"
BACKUP_DIR="/home/user/backups"
WWW_DIR="/var/www/www.example.org/"

DB_USER="mysqluser"
DB_PASS="mysqlpass"
DB_NAME="example_org"
DB_FILE="example.org.$NOW.sql"

WWW_TRANSFORM='s,^www/example.org,www,'
DB_TRANSFORM='s,^home/username/backups,database,'

 

 

Sauvegarde du site et de la bdd

Le script à proprement parlé commence ici, ce sont cinq lignes de commande qui pourraient être lancé dans un terminal. Elles vont contenir les variables prédéfinies précédemment cela pour plus de lisibilité mais surtout pour modifier plus facilement le script.

La première commande, tar, va nous permettre de créer une archive nommée example.org.année.mois.jour.heure contenant un dossier www ou seront présents les données contenues dans le répertoire /var/www/www.example.org.

La seconde commande, mysqdump, va nous permettre de nous connecter à la base de donnée et de créer une copie de la base example_org nommée example.org.année.mois.jour.heure.sql dans le répertoire /home/user/backups.

La troisième commande , tar, va nous permettre de copier le fichier example.org.année.mois.jour.heure.sql, localisé dans /home/root/backups/, dans l’archive crée précédemment dans un répertoire database,

La quatrième commande, rm, va effacer le fichier example.org.année.mois.jour.heure.sql 

La cinquième commande et dernière commande, gzip, va simplement compresser notre archive.

Ci dessous les 5 lignes de commande à ajouter à votre fichier

tar -cvf $BACKUP_DIR/$FILE --transform $WWW_TRANSFORM $WWW_DIR
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/$DB_FILE
tar --append --file=$BACKUP_DIR/$FILE --transform $DB_TRANSFORM $BACKUP_DIR/$DB_FILE
rm $BACKUP_DIR/$DB_FILE
gzip -9 $BACKUP_DIR/$FILE

 

 

Automatiser l’exécution de la sauvegarde

Je vous conseille très fortement d’automatiser le lancement de la sauvegarde sinon vous risquez d’oublier de le faire et lorsque vous aurez besoin de votre sauvegarde vous vous risquez d’être déçu.

Nous allons donc configurer ajouter un fichier de configuration a Cron afin que la sauvegarde s’effectue quotidiennement.

Créons le fichier du script et rendons le exécutable (modifiez example_org par ce que vous voulez)

sudo touch /etc/cron.daily/example.org.backup
sudo chmod +x example.org.backup

 

Maintenant ouvrez ce fichier et ajoutez-y les lignes suivantes

#!/bin/bash
/home/user/scripts/backup.script

 

 

Nettoyez vos sauvegardes

Puisque vous avez planifier une sauvegarde quotidienne vous pouvez sereinement ajouter au script de sauvegarde (/home/user/scripts/backup.script) une commande permettant de supprimer les sauvegardes datant de plus de XX jours.

#Supprimer les sauvegardes de plus de 10 jours
find $BACKUP_DIR -type f -mtime +10 -exec rm {} \;

 

 

Téléchargez vos sauvegardes

Maintenant que vos fichiers sont sauvegardés encore faut-il les télécharger

 

Sous Mac et Linux

Mac et Linux intègrent nativement rsync il vous suffit donc de lancer la commande suivante

rsync example.org:/home/username/backups/* .

 

Sous Windows :

rsync n’est pas disponible nativement sous windows. Certains logiciels intègrent cette fonction, vous trouverez une liste ici

 

Source

Konstantin Kovshenin, theme.fm, A shell script for a complete wordpress backup

 

Quitter la version mobile