60 lines
1.4 KiB
Bash
Executable File
60 lines
1.4 KiB
Bash
Executable File
#!/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."
|