#!/usr/bin/env bash
#
# Sauvegarde de la base École Haïti : /var/backups/ecole-haiti/ecole_haiti-AAAAMMJJ-HHMM.sql.gz
# Conserve les 30 dernières. Installé en /usr/local/bin/ecole-haiti-backup et
# lancé chaque nuit par /etc/cron.d/ecole-haiti.
#
# Une sauvegarde sur le même serveur ne protège pas d'une perte du serveur :
# copiez régulièrement ce dossier ailleurs (rclone vers un stockage objet, ou
# scp vers un autre hôte). Variable BACKUP_COPY_CMD pour l'automatiser, ex. :
#   BACKUP_COPY_CMD='rclone copy /var/backups/ecole-haiti remote:ecole-haiti'
set -euo pipefail

ENV_FILE=/var/www/ecole-haiti/shared/.env
DEST=/var/backups/ecole-haiti
KEEP=30

value() { grep -E "^$1=" "$ENV_FILE" | head -n1 | cut -d= -f2- | tr -d '"'; }

DB_NAME="$(value DB_DATABASE)"; DB_USER="$(value DB_USERNAME)"; DB_PASS="$(value DB_PASSWORD)"; DB_HOST="$(value DB_HOST)"

mkdir -p "$DEST"
FILE="$DEST/${DB_NAME}-$(date +%Y%m%d-%H%M).sql.gz"

# --single-transaction : cohérent sans verrouiller les tables.
MYSQL_PWD="$DB_PASS" mysqldump -u "$DB_USER" -h "${DB_HOST:-127.0.0.1}" \
    --single-transaction --routines --default-character-set=utf8mb4 "$DB_NAME" | gzip -9 > "$FILE"

ls -1t "$DEST"/*.sql.gz | tail -n +$((KEEP + 1)) | xargs -r rm -f
echo "$(date '+%F %T') sauvegarde : $FILE ($(du -h "$FILE" | cut -f1))"

if [[ -n "${BACKUP_COPY_CMD:-}" ]]; then
    eval "$BACKUP_COPY_CMD"
fi

# Restauration :  gunzip < fichier.sql.gz | mysql -u ecole -p ecole_haiti
