35 lines
984 B
Bash
35 lines
984 B
Bash
#!/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
|