MES TUTOS
VEILLE
Chargement de la veille...
LINUX / BASH

Automatiser ses Sauvegardes : Scripting Bash et Rotation

"Les données n'existent pas tant qu'elles ne sont pas sauvegardées à deux endroits différents." Un crash disque ou une erreur humaine (rm -rf /) arrive sans prévenir. Voici comment créer un script robuste qui sauvegarde, compresse, et nettoie vos anciennes archives automatiquement.

1. La stratégie (Règle 3-2-1)

Avant de coder, rappelons la base. Une sauvegarde locale sur le même disque ne protège pas contre un crash matériel ou un incendie. L'idéal est :


2. Le Script de Sauvegarde (Bash)

Nous allons créer un script qui :

  1. Crée une archive datée du dossier /var/www/html (Site Web).
  2. Exporte la base de données MySQL.
  3. Supprime les sauvegardes vieilles de plus de 7 jours (Rotation).

Créez le fichier : nano /root/backup-auto.sh

#!/bin/bash

# --- VARIABLES DE CONFIGURATION ---
BACKUP_DIR="/var/backups/monsite"
SOURCE_DIR="/var/www/html"
DB_NAME="wordpress"
DB_USER="root"
DB_PASS="votre_mot_de_passe"
DATE=$(date +%F_%H-%M-%S) # Format: AAAA-MM-JJ_HH-MM-SS

# Création du dossier de backup s'il n'existe pas
mkdir -p $BACKUP_DIR

echo "--- Démarrage du backup : $DATE ---"

# 1. Sauvegarde des Fichiers (tar)
# -c: create, -z: gzip, -p: preserve permissions, -f: file
tar -czpf $BACKUP_DIR/files-$DATE.tar.gz $SOURCE_DIR 2>/dev/null

if [ $? -eq 0 ]; then
    echo "[OK] Fichiers sauvegardés."
else
    echo "[ERREUR] Échec de la sauvegarde fichiers."
fi

# 2. Sauvegarde de la Base de Données (mysqldump)
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/db-$DATE.sql
gzip $BACKUP_DIR/db-$DATE.sql # On compresse le SQL

if [ $? -eq 0 ]; then
    echo "[OK] Base de données exportée."
else
    echo "[ERREUR] Échec de l'export SQL."
fi

# 3. Rotation (Suppression des vieux fichiers > 7 jours)
find $BACKUP_DIR -type f -name "*.gz" -mtime +7 -delete

echo "--- Backup terminé. Nettoyage effectué. ---"

N'oubliez pas de rendre le script exécutable (sinon le Cron échouera) :

chmod +x /root/backup-auto.sh
Astuce Pro : L'option -mtime +7 dans la commande find est cruciale. Sans elle, votre disque dur finirait par être saturé par des milliers de sauvegardes. C'est ce qu'on appelle la politique de rétention.

3. Automatisation avec Cron

Nous voulons que ce script s'exécute toutes les nuits à 03h00 du matin (heure creuse).

Ouvrez l'éditeur Cron :

crontab -e

Ajoutez cette ligne à la fin :

0 3 * * * /root/backup-auto.sh >> /var/log/backup.log 2>&1

Explication :

4. Externalisation (Le "+1")

Pour respecter la règle 3-2-1, il faut envoyer ce fichier ailleurs. Le plus simple est d'utiliser rsync vers un autre serveur ou un NAS à la fin du script :

# À ajouter à la fin du script
rsync -avz -e ssh $BACKUP_DIR/ user@serveur-distant:/home/user/backups/

5. Tester la restauration

"Une sauvegarde non testée n'est pas une sauvegarde."

Pour restaurer, il suffit de faire l'inverse :

# Restaurer les fichiers
tar -xzf files-2023-XX-XX.tar.gz -C /

# Restaurer la base de données
gunzip < db-2023-XX-XX.sql.gz | mysql -u root -p wordpress
← Retour à la bibliothèque