#!/usr/bin/env bash # Donna — daily MariaDB backup with 14-day retention set -euo pipefail BACKUP_DIR="/var/backups/donna" ENV_FILE="/etc/donna/donna.env" RETENTION_DAYS=14 # shellcheck disable=SC1090 . <(grep -E '^(DB_NAME|DB_USER|DB_PASS|DB_HOST|DB_PORT)=' "$ENV_FILE") mkdir -p "$BACKUP_DIR" chmod 750 "$BACKUP_DIR" STAMP=$(date +%F_%H%M%S) OUT="$BACKUP_DIR/donna-$STAMP.sql.gz" MYSQL_PWD="$DB_PASS" mariadb-dump \ --host="${DB_HOST:-127.0.0.1}" \ --port="${DB_PORT:-3306}" \ --user="$DB_USER" \ --single-transaction \ --quick \ --routines \ --triggers \ --events \ --default-character-set=utf8mb4 \ "$DB_NAME" \ | gzip -9 > "$OUT" chmod 640 "$OUT" find "$BACKUP_DIR" -type f -name 'donna-*.sql.gz' -mtime "+$RETENTION_DAYS" -delete echo "[donna-backup] $(date -Is) wrote $OUT ($(du -h "$OUT" | cut -f1))"