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 debian 12 = OK)
- serveur web apache2 (marche aussi avec openlitespeed, il faut juste adapter les repertoires à sauvegarder)
- serveur mysql (mariadb ou autre peu importe)
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