#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" BACKUP_DIR="${BACKUP_DIR:-$ROOT_DIR/backups}" DB_SERVICE="${DB_SERVICE:-db}" DB_NAME="${DB_NAME:-resource_manager}" DB_USER="${DB_USER:-resman}" DB_PASSWORD="${DB_PASSWORD:-resmanpass}" KEEP_DAYS="${KEEP_DAYS:-30}" TIMESTAMP="$(date +%Y%m%d-%H%M%S)" BACKUP_FILE="$BACKUP_DIR/${DB_NAME}-${TIMESTAMP}.sql" mkdir -p "$BACKUP_DIR" cd "$ROOT_DIR" echo "Creating database backup: $BACKUP_FILE" cleanup_failed_dump() { if [[ -f "$BACKUP_FILE" ]]; then rm -f "$BACKUP_FILE" fi } trap cleanup_failed_dump ERR docker compose exec -T "$DB_SERVICE" \ mariadb-dump \ --single-transaction \ --quick \ --routines \ --triggers \ --user="$DB_USER" \ --password="$DB_PASSWORD" \ "$DB_NAME" \ > "$BACKUP_FILE" trap - ERR gzip "$BACKUP_FILE" if [[ "$KEEP_DAYS" =~ ^[0-9]+$ ]] && [[ "$KEEP_DAYS" -gt 0 ]]; then find "$BACKUP_DIR" -name "${DB_NAME}-*.sql.gz" -type f -mtime +"$KEEP_DAYS" -delete fi echo "Backup finished: ${BACKUP_FILE}.gz"