加固备份恢复本地基线(07-26-internal-ops-recovery-baseline)
这个提交包含在:
+44
-7
@@ -9,17 +9,46 @@ mkdir -p "$BACKUP_DIR"
|
||||
TS="$(date +%Y%m%d_%H%M%S)"
|
||||
OUT_FILE="${OUT_FILE:-$BACKUP_DIR/hyb-oa-db-${TS}.dump}"
|
||||
|
||||
if [[ -e "$OUT_FILE" ]]; then
|
||||
echo "[ERR] backup output already exists: $OUT_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$(dirname "$OUT_FILE")"
|
||||
|
||||
if [[ -z "${DATABASE_URL:-}" ]]; then
|
||||
echo "[ERR] DATABASE_URL is required" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DB_TOOL_MODE="${DB_TOOL_MODE:-auto}"
|
||||
if [[ "$DB_TOOL_MODE" != "auto" && "$DB_TOOL_MODE" != "host" && "$DB_TOOL_MODE" != "docker" ]]; then
|
||||
echo "[ERR] DB_TOOL_MODE must be auto, host, or docker" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "[INFO] DB backup start: $OUT_FILE"
|
||||
|
||||
if command -v pg_dump >/dev/null 2>&1; then
|
||||
pg_dump "$DATABASE_URL" --format=c --no-owner --no-acl --file "$OUT_FILE"
|
||||
echo "[OK] DB backup done (pg_dump): $OUT_FILE"
|
||||
exit 0
|
||||
if [[ "$DB_TOOL_MODE" != "docker" ]] && command -v pg_dump >/dev/null 2>&1; then
|
||||
if pg_dump "$DATABASE_URL" --format=c --no-owner --no-acl --file "$OUT_FILE"; then
|
||||
if [[ ! -s "$OUT_FILE" ]]; then
|
||||
echo "[ERR] DB backup is empty: $OUT_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "[OK] DB backup done (pg_dump): $OUT_FILE"
|
||||
exit 0
|
||||
fi
|
||||
rm -f -- "$OUT_FILE"
|
||||
if [[ "$DB_TOOL_MODE" == "host" ]]; then
|
||||
echo "[ERR] host pg_dump failed" >&2
|
||||
exit 1
|
||||
fi
|
||||
echo "[WARN] host pg_dump failed; trying docker fallback" >&2
|
||||
fi
|
||||
|
||||
if [[ "$DB_TOOL_MODE" == "host" ]]; then
|
||||
echo "[ERR] DB_TOOL_MODE=host requires pg_dump" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v docker >/dev/null 2>&1; then
|
||||
@@ -37,9 +66,17 @@ if [[ -z "$POSTGRES_DB" || -z "$POSTGRES_USER" || -z "$POSTGRES_PASSWORD" ]]; th
|
||||
exit 1
|
||||
fi
|
||||
|
||||
docker exec -e PGPASSWORD="$POSTGRES_PASSWORD" "$DB_CONTAINER" \
|
||||
if ! docker exec -e PGPASSWORD="$POSTGRES_PASSWORD" "$DB_CONTAINER" \
|
||||
pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB" --format=c --no-owner --no-acl \
|
||||
>"$OUT_FILE"
|
||||
>"$OUT_FILE"; then
|
||||
rm -f -- "$OUT_FILE"
|
||||
echo "[ERR] docker pg_dump failed" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -s "$OUT_FILE" ]]; then
|
||||
echo "[ERR] DB backup is empty: $OUT_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "[OK] DB backup done (docker exec): $OUT_FILE"
|
||||
|
||||
|
||||
在新工单中引用
屏蔽一个用户