Script pour sauvegarder son serveur web linux

Vous avez configurer votre serveur web, il est désormais temps de mettre en place un script pour sauvegarder ses fichiers et ses bases de données !

Mon exemple s’articule sur la configuration suivante :

  • distribution linux Debian 8 ou ultérieur (testé sur 8, 9 et 10)
  • serveur web apache2
  • serveur mysql (mariadb ou autre peu importe en théorie)

script pour sauvegarder son serveur

Commençons par créer un dossier backup et un sous dossier sql à la racine de notre système de fichier (ou ailleurs si vous le voulez, pensez à adapter simplement la suite du tutoriel à votre répertoire). Le sous dossier SQL contiendra temporairement les dump de nos bases.

mkdir /backup && mkdir /backup/sql

Éditons ensuite notre futur script que nous plaçons dans notre dossier backup et que nous appelons backup.sh

nano /backup/backup.sh

Le script de sauvegarde

#!/bin/bash

#on se place dans notre dossier de sauvegarde cd /backup/
#création d'une archive du dossier www tar -cf backup.tar /var/www/
#liste des bases SQL LISTEBDD=$( echo 'show databases' | mysql -uuser -pvotremotdepasse )
#on boucle sur chaque base de données for SQL in $LISTEBDD do mysqldump -uuser -pvotremotdepasse $SQL > /backup/sql/$SQL.sql done
#ajout des dump SQL dans l'archive
tar -rvf backup.tar /backup/sql/
#compression de l'archive
gzip backup.tar
#renommage de l'archive avec date et heure / minutes
mv backup.tar.gz backup_$(date +%d-%m-%Y-%Hh-%Mm).tar.gz
#suppression des dump sql
rm /backup/sql/*.sql

Pensez à faire un chmod +x sur ce script avec la commande suivante :

chmod +x /backup/backup.sh

Le script est suffisamment commenté je pense. N’oubliez pas de modifier le compte et mot de passe mysql (un utilisateur « sauvegarde » qui peut lire toutes les bases est bien plus approprié que le compte root)

Vous obtenez en fin de script une archive tar compressée en .tar.gz nomme par exemple 23-11-2019-17h-00m

Transférer votre archive de sauvegarde sur un serveur distant

Si vous souhaitez transférer votre sauvegarde sur un serveur distant tournant sous linux (ou un nas), ajoutez en fin de script la ligne suivante :

scp "backup_$(date +%d-%m-%Y-%Hh-%Mm).tar.gz" user@adresseduserveur:/chemindubackup/

Pour que cela fonctionne, il est préférable de disposer de la clé SSH sur votre serveur à sauvegarder pour vous connecter au serveur ciblé par scp (correspondant au compte utilisé dans la commande scp). A la première connexion, vous devrez ajouter le serveur cible aux hôtes connus.

Exécution automatique du script via crontab

Pour conclure, ajoutez ce script à votre crontab pour sauvegarder vos données à intervalle régulier. Par exemple pour une sauvegarde tous les jours à 0:15 :

15 0 * * * root /backup/backup.sh

Laisser un commentaire