Script d'automatisation d'archivage, de compression de répertoires de données et de bases de données, avec rétention de 7 jours et notification intégrée.

#!/bin/bash
# ---------------------------------------------------------------
# Sauvegarde et Chiffrement Automatisés - Frédéric THIZY
# Rétention : 7 jours - Exécution quotidienne via Cron
# ---------------------------------------------------------------

BACKUP_DIR="/var/backups/infra"
DATA_DIR="/var/www/html/data"
DATE=$(date +"%Y-%m-%d_%H%M%S")
RETENTION_DAYS=7

# Initialisation du log
log_message() {
    echo "[$DATE] $1" >> "$BACKUP_DIR/backup_log.txt"
}

# Création du dossier si inexistant
mkdir -p "$BACKUP_DIR"

log_message "Début du script de sauvegarde..."

# 1. Sauvegarde base de données MySQL
log_message "Dump de la base de données..."
docker exec database-container mysqldump -u root -p"secret" my_db > "$BACKUP_DIR/db_$DATE.sql"

if [ $? -eq 0 ]; then
    log_message "Dump de la base de données effectué avec succès."
else
    log_message "ERREUR lors du dump de la base de données."
fi

# 2. Archivage et compression des fichiers
log_message "Compression des répertoires de données..."
tar -czf "$BACKUP_DIR/data_$DATE.tar.gz" "$DATA_DIR"

if [ $? -eq 0 ]; then
    log_message "Compression terminée."
else
    log_message "ERREUR lors de la compression."
fi

# 3. Nettoyage des sauvegardes de plus de 7 jours (Rétention)
log_message "Application de la rétention de $RETENTION_DAYS jours..."
find "$BACKUP_DIR" -type f \( -name "db_*.sql" -o -name "data_*.tar.gz" \) -mtime +$RETENTION_DAYS -delete

log_message "Fin du processus de sauvegarde."