#!/bin/bash # Sauvegarde quotidienne des bases de données MariaDB # Basé sur le nom de la base : *_utilisateur BACKUP_DIR="/var/backups/mysql" RETENTION_DAYS=21 DATE=$(date +%F) mkdir -p "$BACKUP_DIR" # Liste toutes les bases sauf celles internes DBS=$(mysql -N -B -e "SHOW DATABASES;" | grep -Ev "^(information_schema|performance_schema|mysql|sys)$") for db in $DBS; do # Récupère l'utilisateur = partie après le dernier "_" user=$(echo "$db" | awk -F'_' '{print $NF}') # Si jamais pas d'underscore, on met dans "unknown" [ -z "$user" ] && user="unknown" USER_DIR="$BACKUP_DIR/$user" mkdir -p "$USER_DIR" FILE="$USER_DIR/${db}_$DATE.sql.gz" # Sauvegarde if ! mysqldump --single-transaction "$db" | gzip > "$FILE"; then echo "Erreur lors de la sauvegarde de $db" >&2 rm -f "$FILE" fi done # Nettoyage des fichiers plus vieux que 21 jours find "$BACKUP_DIR" -type f -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete