Files

35 lines
984 B
Plaintext
Raw Permalink Normal View History

2025-10-02 10:16:03 +02:00
#!/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