DB Restore script

This commit is contained in:
ecki
2026-06-23 14:37:20 +02:00
parent 0bc72cb02e
commit e6c894aaa4
3 changed files with 81 additions and 0 deletions
+59
View File
@@ -0,0 +1,59 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
DB_SERVICE="${DB_SERVICE:-db}"
DB_NAME="${DB_NAME:-resource_manager}"
DB_USER="${DB_USER:-resman}"
DB_PASSWORD="${DB_PASSWORD:-resmanpass}"
FORCE="${FORCE:-0}"
SKIP_PRE_RESTORE_BACKUP="${SKIP_PRE_RESTORE_BACKUP:-0}"
if [[ $# -ne 1 ]]; then
echo "Usage: $0 <backup.sql|backup.sql.gz>"
exit 1
fi
RESTORE_FILE="$1"
if [[ ! -f "$RESTORE_FILE" ]]; then
echo "Backup file not found: $RESTORE_FILE"
exit 1
fi
cd "$ROOT_DIR"
if [[ "$FORCE" != "1" ]]; then
echo "This will restore '$RESTORE_FILE' into database '$DB_NAME'."
echo "Existing data may be overwritten."
read -r -p "Type '$DB_NAME' to continue: " CONFIRMATION
if [[ "$CONFIRMATION" != "$DB_NAME" ]]; then
echo "Restore cancelled."
exit 1
fi
fi
if [[ "$SKIP_PRE_RESTORE_BACKUP" != "1" ]]; then
echo "Creating safety backup before restore..."
"$ROOT_DIR/scripts/backup-db.sh"
fi
echo "Restoring database '$DB_NAME' from: $RESTORE_FILE"
if [[ "$RESTORE_FILE" == *.gz ]]; then
gunzip -c "$RESTORE_FILE" | docker compose exec -T "$DB_SERVICE" \
mariadb \
--user="$DB_USER" \
--password="$DB_PASSWORD" \
"$DB_NAME"
else
docker compose exec -T "$DB_SERVICE" \
mariadb \
--user="$DB_USER" \
--password="$DB_PASSWORD" \
"$DB_NAME" \
< "$RESTORE_FILE"
fi
echo "Restore finished."