Outils Systèmes

Sauvegarde de site web avec les tâches Cron

Etre certain de pouvoir redémarrer le site en cas de problème est vital !
Généralement, tant que l'on est pas confronté à un cas de perte de données, le sujet ne semble pas prioritaire.

Quels sont les risques ?
- Problème lors d'une migration ou d'une mise à jour du site
- Piratage du site et suppression des données
- Erreur de manipulation avec perte de certaines informations
- Changement d'un paramètre qui empêche l'ouverture du site
- Un crash du serveur ou un fichier de configuration endommagé
- La suspension de votre compte d'hébergement

Les cas possibles sont nombreux et vous serez forcément confronté à l'un d'eux un jour ou l'autre.

Parfois, une simple mise à jour d'un composant anodin sur un CMS peut perturber le fonctionnement d'une ou plusieurs fonctions du site et sa désinstallation ne résout pas le problème. Cela arrive plus souvent qu'on ne le pense, même en ayant fait la manipulation sur une instance de test auparavant.

La sauvegarde REGULIERE du site est donc CAPITALE !

Concept


Il est très facile d'automatiser ce processus sur la majorité des solutions d'hébergement du marché : Une simple tâche CRON permet d'automatiser vos sauvegardes de manière très fiable.

A ceux qui se reposent sur l'hébergeur et ses propres sauvegardes, je vous invite à faire attention. Aucun hébergeur n'est tenu de restaurer vos données. (Sauf souscription éventuelle d'un service dédié et payant) 
Vous êtes responsable de vos données et vous ne pourrez pas vous retourner contre l'hébergeur.

Ce qui nous rappelle une règle importante relative aux sauvegardes : Ne pas stocker la sauvegarde au même endroit que le site web lui-même. En effet, si le serveur plante ou votre compte est suspendu : vous perdez le site et sa sauvegarde en même temps.
 
Avant de rentrer dans le script Cron lui-même, voici quelques conseils :
- Sauvegarder toujours le répertoire de votre site Web ET la base de données associée
- Lorsque vous allez générer les fichiers de sauvegarde, placez les EN DEHORS de l'arboresence public du site (public_html) afin d'éviter que votre backup ne puisse être ouvert depuis Internet.
- Programmez une tâche régulière selon la criticité de votre site. Si le site est statique, une fois par semaine suffit. Si votre contenu change tous les jours, un backup quotidien s'impose au moins pour la base de données.
- Récupérez localement ces fichiers de sauvegarde ou copiez les (aussi avec une tâche Cron) sur un autre serveur (en FTP par exemple)
- Activez l'envoi du log de la sauvegarde automatiquement sur votre email, afin de vérifier que le processus n'a pas planté.
- Ponctuellement, ouvrez le fichier ZIP et décompressez le pour vérifier si toutes les données importantes sont présentes et si aucun fichier n'est endommagé. Il n'y a rien de pire qu'une sauvegarde faite, mais qui ne peut pas être exploitée le jour où c'est nécessaire.

Définir la fréquence de la tâche


Ajustez la fréquence des sauvegardes en fonction du rythme de mise à jour des données et de la taille du site web.
Généralement, vous utiliserez l'interface de CPanel qui est assez simple. En effet, le formatage d'une tâche Cron n'est pas très évident à utiliser "à la main", mais CPanel se charge de formater la ligne de commande selon vos critères.

Vous trouverez en principe ce type d'interface, avec la possibilité de définir globalement la tâche dans la première liste déroulante (Common Settings), ou bien de préciser chaque action en fonction des jours, mois, minutes au besoin.
cron optionsSi vous utilisez la première liste déroulante, vous constaterez qu'elle couvre 95% des cas ! (Toutes les 5 minutes, toutes les heures, une ou deux fois par jour, une fois par semaine, une fois par mois, etc.)
cron options menu

Formatage du nom des fichiers


Cela peut paraître anodin, mais il est important de clairement définir la manière dont sera formté le nom du fichier de backup.

L'objectif n'est clairement pas de ne conserver qu'un seul fichier de la dernière sauvegarde. Vous devez toujours garder au moins un historique d'une semaine. Comme vous aurez probablement plusieurs sites et plusieurs bases de données, il faut mieux clarifier les choses dès le départ.
Il est donc important de spécifier dans le nom du fichier :
  • Le nom du site
  • Le type de sauvegarde (base de données ou répertoire du site)
  • La date

Par exemple :
BKP_MonPremierSite_DB_2013-02-01.zip
Backup de la base de données du site MonPremierSite.com au 1er Février 2013

BKP_MonSecondSite_FICHIERS_2013-03-02.zip
Backup du répertoire du site MonSecondSite.com à la date du 02 Mars 2013

Sauvegarde d'une base MySQL


Pour créer ce script vous aurez besoin : 

- D'un répertoire (hors du public_html) pour y stocker le fichier. (Les données de la base contenant les informations sur les comptes utilisateurs et la config sur site, mieux vaut les protéger)
Pour notre exemple, ce sera /home/moncompte/BACKUP
- D'un compte MySQL autorisé en lecture sur la base de données (Je vous conseille la création d'un compte dédié à la tâche de sauvegarde, ce qui évite des soucis en cas de changement de config ou de mot de passe)
- Nous utiliserons ici un compte bkp_user avec pour mot de passe bkp_pass et nous sauvegarderons une base de données appelée monsite_db

La ligne de commande Cron n'est rien d'autre qu'une commande Linux ou un script Shell. Vous pouvez donc taper directement une commande ou lancer un fichier contenant un script.
Il est également possible d'exécuter plusieurs lignes de commande directement dans Cron en les séparant avec un point-virgule (;)

Le script en question :

date=`date -I`; mysqldump -u bkp_user -pbkp_pass monsite_db > /home/moncompte/BACKUP/BKP_MonSite_DB_$date.sql; gzip /home/moncompte/BACKUP/BKP_MonSite_DB_$date.sql
 
Explications :
- La variable "date" est créé à partir de la commande "date -I" afin de la formater sur le modèle année-mois-jour en chiffres, ce qui est facile à interpréter, même par un script. Cette variable sera collé à la fin du nom de fichier.
- La commande mysqldump nécessite comme paramètre le nom d'utilisateur (derrière -u), le mot de passe (collé à -p) et le nom de la base de données. Le signe supérieur (>) indique une redirection de la commande précédente vers un fichier avec l'extention .sql
- Le gzip compresse ensuite le fichier SQL. 
 

Sauvegarde des fichiers du site


Restons sur le cas du site monsite.com : Nous souhaitons sauvegarder l'ensemble de l'arborescence, mais exclure le répertoire PDF dans lequel se trouve de nombreux fichiers très volumineux et qui sont conservés à titre d'archive. Il n'est donc pas nécessaire de les sauvegarder systématiquement.

date=`date -I`; zip -r /home/moncompte/BACKUP/BKP_MonSite_FICHIERS_$date.zip public_html/monsite.com/* -x public_html/monsite.com/PDF\*
 
Explications :
- Toujours la variable date formatée, qui sera ajouté à la fin du nom de fichier
- La commande zip avec l'option "-r" afin que l'ensemble des répertoires et sous-répertoires soient traités (mode récursif)
- L'option "-x" qui permet d'exclure une partie de l'arborescence. Cette option devra être indiquée devant chaque chemin à exclure si vous en avez plusieurs dans ce cas.

Optimisation de l'espace disque


Selon les cas, vous souhaiterez conserver vos archives plus ou moins longtemps. La volumétrie occupée par ces sauvegarde influence également la rotation de vos sauvegardes, limitée à votre espace d'hébergement disponible.

Première option : Le format de date du fichier

Ce principe est simple, il vous suffit de modifier le format de la variable de date. Au lieu d'utiliser année-mois-jour en chiffres, vous isolez le jour de la semaine par exemple.
Ainsi, votre fichier de sauvegarde s'appelera BKP_MonPremierSite_DB_Lundi.zip
Comme il y aura un fichier généré par jour de la semaine, une rotation automatique va se mettre en place lorsque le Lundi suivant le fichier sera remplacé.
Vous aurez donc toujours une semaine d'historique de manière automatique.

Seconde option : Purger les fichiers sur un critère de date

Select your language :

Newsletter