etc/cron
This commit is contained in:
34
etc/cron.daily/backup-mariadb
Normal file
34
etc/cron.daily/backup-mariadb
Normal file
@@ -0,0 +1,34 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user