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 :
- vous êtes partis en vacances et vous avez oublié de payer votre facture résultat votre serveur a été fermé et remis sur le marché (presque arrivé)
- le disque de votre serveur a rendu l`âme
- vous avez fait des modifications et planté votre site
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 :
- vous avez un accès SSH à vos données
- vos données sont stockées dans /var/www/www.example.com
- le répertoire (interne) de destination de votre sauvegarde est /home/user/backups
- le script sera stockés dans /home/user/scripts
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 :
- la variable NOW qui donnera un timestamp à notre fichier de sauvegarde
- la variable FILE qui attribue un nom pour notre fichier de sauvegarde
- la variable BACKUP_DIR qui définit le répertoire local de sauvegarde
- la variable WWW_DIR qui indique où se trouvent les fichiers à sauvegarder
- les variables DB_USER, DB_PASS, DB_NAME qui permettent de se connecter à mysql
- la variable DB_FILE qui attribue un nom à la sauvegarde mysql
- les variables WWW_TRANSFORM et DB_TRANSFORM permettent de rendre la navigation plus facile dans l’archive contenant la sauvegarde
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
Merci pour ce script, il est impeccable c’est exactement ce qu’il me fallait, au top 😉