Sauvegarder automatiquement votre base SQL de son site vers un NAS

Dans un précédent article, je vous avais montré comment faire une sauvegarde automatique du serveur FTP de son site. Aujourd’hui je vous propose de sauvegarder les données essentielles de votre site, la base de donnée SQL, avec un horodatage afin de pouvoir garder plusieurs versions et restaurer facilement une ancienne version de votre site, mais aussi compresser cette sauvegarde pour un gain de place. On nomme cela faire un Dump. Comme pour l’article précédent, cela permet une sauvegarde si votre site ne possède pas de système pour cela ou si l’ajout d’un quelconque plug-in ne peut être installé.
On va voir 2 façons de le faire, la première si vous faites de l’autohébergement sur votre NAS et la seconde si votre site est stocké chez un hébergeur comme OVH par exemple. Pour cela nous allons faire un script PHP, une tâche Cron et il vous faut le paquet PHP 5.6 pour un site autohébergé.

1- Sauvegarder une base SQL pour un site autohébergé sur un NAS

Dans ce guide nous allons faire cela sur un Nas Synology, commencez par créer un nouveau dossier partagé en dehors du dossier Web pour y sauvegarder vos bases.
sauvegarder site web nas synology

Ensuite, créez un fichier PHP, vous pouvez utiliser l’application NotePad++ disponible au lien suivant. Une fois l’application ouverte, collez le bout de code suivant et enregistrez au format .php.

<?php
$date = date(‘d-m-Y-H\hi’);

// Répertoire de destination des backups (chemin absolu !)
define(‘DIR_DEST’, ‘/volume1/Sauvegardes_Web/votre_site/sql/’);

// Paramètres de connexion à la base de données
define(‘DB_HOST’, ‘localhost’);
define(‘DB_USER’, ‘utilisateur_SQL’);
define(‘DB_PWD’, ‘mot_de_passe_sql’);
define(‘DB_NAME’, ‘nom_de_base_sql’);

// Lancement du backup
system(« mysqldump –host= ».DB_HOST. » –user= ».DB_USER. » –password= ».DB_PWD. » « .DB_NAME. » > « .DIR_DEST.DB_NAME. »_ ».$date. ».sql »);
system(« gzip « .DIR_DEST.DB_NAME. »_ ».$date. ».sql »);
?>

Explication du code :

Voici les lignes qu’il vous faudra changer.

  • Répertoire de destination : Indiquez le chemin absolu, c’est-à-dire qu’il faut aussi indiquer le volume suivant où vous avez créé votre répertoire, indiquez le volume1, 2, 3 … et terminez le chemin avec un /.
  • localhost : Pour un site autohébergé, laissez localhost. Pour un site externe, indiquez l’adresse du serveur SQL.
  • Utilisateur_SQL : Pour Synology indiquez root.
  • Mot_de_passe_sql : Votre mot de passe pour vous connecter à votre base.
  • Nom_de_base_sql : Indiquez le nom de la base de données à sauvegarder.

Une fois que vous avez modifié les champs, enregistrez votre fichier et copiez-le sur votre NAS, soit à la racine de votre site, soit dans un nouveau dossier par exemple Script dans votre dossier Web.

Création de la tâche Cron

Sur votre NAS, allez dans le Panneau de configuration puis sur Planificateur de tâches.
planificateur de tâches synologyCliquez sur Créer puis Tâche planifiée et Script défini par l’utilisateur.
Dans le premier onglet, donnez un nom à votre tâche ensuite sur l’onglet Programmer indiquez la période d’exécution et ensuite la fréquence, dans mon exemple la sauvegarde se fait toutes les 4h.

Dans l’onglet Paramètres de tâche, nous allons indiquer une adresse mail pour être avertis en cas d’échec de l’exécution de la commande. Dans le cadre du bas, nous allons indiquer la ligne de commande à exécuter pour notre script.

Voici la commande à insérer dans le cadre.

/usr/local/bin/php56 -f /volume1/web/script/backup_sql.php

Indiquez le chemin absolu vers votre script, remplacez /volume1/web/script/backup_sql.php par votre chemin.
Nous allons maintenant faire un test, sélectionnez votre tâche et cliquez sur Exécuter.

Si tout s’est bien passé, vous devriez retrouver votre archive dans le chemin indiqué dans le script PHP.
Voici ce que vous devriez avoir dans votre dossier, vos archives avec dans le titre l’horodatage.

2- Sauvegarder une base de données chez un hébergeur et les télécharger sur son NAS

Pour le script, même étape que le début, créez un fichier PHP, mais il va falloir changer la ligne du répertoire de destination.

<?php
$date = date(‘d-m-Y-H\hi’);

// Répertoire de destination des backups (chemin absolu !)
define(‘DIR_DEST’, ‘/home/nom_d’utilisateur_FTP/sauvegarde_SQL/les_bases/’);

// Paramètres de connexion à la base de données
define(‘DB_HOST’, ‘Adresse_serveur_SQL’);
define(‘DB_USER’, ‘Utilisateur_SQL’);
define(‘DB_PWD’, ‘Mot_de_passe_SQL’);
define(‘DB_NAME’, ‘Nom_base_SQL’);

// Lancement du backup
system(« mysqldump –host= ».DB_HOST. » –user= ».DB_USER. » –password= ».DB_PWD. » « .DB_NAME. » > « .DIR_DEST.DB_NAME. »_ ».$date. ».sql »);
system(« gzip « .DIR_DEST.DB_NAME. »_ ».$date. ».sql »);
?>

Voici la ligne à remplacer pour OVH. (Pour les autres champs voir la première partie).

/home/nom_d’utilisateur_FTP/sauvegarde_SQL/les_bases/

Pour protéger les sauvegardes, à la racine du FTP créez un nouveau dossier par exemple sauvegarde_SQL. Dans ce dossier ajoutez le fichier PHP de votre script dans ce même dossier pour ne pas mélanger les sauvegardes et le script vous pouvez créer un nouveau dossier les_bases.
Il faut maintenant créer une tâche Cron chez OVh, allez sur votre compte puis sur Hébergements et sélectionnez votre domaine. Ensuite cliquez sur Plus + puis sur Tâches Planifiées – Cron, sur cette nouvelle page cliquez sur Ajouter une planification.

Dans le premier champ indiquez le chemin vers le fichier php, dans notre cas sauvegarde_SQL/backup_sql.php à la ligne langage sélectionnez PHP 5.6, logs par mail sélectionnez Autre puis indiquez votre email. Enfin, donnez un titre à votre tâche puis valider. À l’étape suivante, choisissez la fréquence du lancement de votre script, dans mon exemple toutes les 2h et passez à la dernière étape. Contrôlez les paramètres et valider. Patientez le temps que vous avez indiqué pour voir si tout fonctionne correctement.

Notre tâche est créée.

taches planifiées Cron OVH

Si tout fonctionne bien vous devez retrouver vos sauvegardes dans le dossier sauvegarde_SQL/les_bases

Télécharger les bases sauvegardées vers son NAS

Les bases sont sauvegardées, mais sur votre FTP (site) en ligne. Notre but est de les sauvegarder sur notre NAS. Nous allons maintenant voir comment télécharger automatiquement nos archives.
Sur votre NAS allez dans Panneau de configuration puis Planificateur de tâches.
Cliquez sur Créer puis Tâche planifiée et Script défini par l’utilisateur.
Dans le premier onglet, donnez un nom à votre tâche ensuite sur l’onglet Programmer indiquez la période d’exécution et ensuite la fréquence, dans mon exemple le téléchargement se fait toutes les 2h.

Dans l’onglet Paramètres de tâche, nous allons là aussi indiquer une adresse mail pour être averti en cas d’échec de l’exécution de la commande. Dans le cadre du bas nous allons indiquer la ligne de commande à exécuter pour télécharger nos archives.

Voici la commande :

wget -m ftp://utilisateur_FTP:mdp_FTP@adresse_serveur_FTP/sauvegarde_SQL/les_bases/* -P /volume1/Sauvegardes_Web/nom_du_site/sql/

Champ à modifier:
  • Utilisateur_FTP: Indiquez le nom d’utilisateur de votre serveur FTP.
  • mdp_FTP: Le mot de passe de connexion pour votre compte FTP.
  • adresse_serveur_FTP: Adresse du serveur FTP.
  • Chemin absolu: Là aussi il faut indiquer un chemin absolu avec le numéro du volume et le / à la fin.

Nous allons maintenant faire un test, sélectionnez votre tâche et cliquez sur Exécuter. Votre NAS devrait télécharger les archives.

Voici toutes nos archives téléchargées.

Maintenant que les sauvegardes sont téléchargées sur votre NAS, vous pouvez de temps en temps vider le dossier de votre FTP en ligne.