DB Restore script
This commit is contained in:
Executable
+59
@@ -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."
|
||||
Reference in New Issue
Block a user