44 lines
1.3 KiB
Bash
44 lines
1.3 KiB
Bash
#!/bin/bash
|
|
# ============================================
|
|
# 丹阳公益婚恋服务平台 — PostgreSQL 恢复脚本
|
|
# ============================================
|
|
# 用法:
|
|
# ./scripts/restore.sh <backup-file>
|
|
# ./scripts/restore.sh backups/danyang_match_20260828_143000.sql.gz
|
|
# ============================================
|
|
set -euo pipefail
|
|
|
|
if [ $# -lt 1 ]; then
|
|
echo "用法: $0 <备份文件路径>"
|
|
echo "示例: $0 /app/backups/danyang_match_20260828_143000.sql.gz"
|
|
exit 1
|
|
fi
|
|
|
|
BACKUP_FILE="$1"
|
|
|
|
if [ ! -f "${BACKUP_FILE}" ]; then
|
|
echo "错误: 备份文件不存在: ${BACKUP_FILE}"
|
|
exit 1
|
|
fi
|
|
|
|
DB_NAME="${DB_NAME:-danyang_match}"
|
|
DB_USER="${DB_USER:-danyang}"
|
|
DB_HOST="${DB_HOST:-postgres}"
|
|
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始恢复: ${BACKUP_FILE} -> ${DB_NAME}"
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ⚠️ 将覆盖现有数据库,请确认!"
|
|
|
|
# 恢复数据
|
|
gunzip -c "${BACKUP_FILE}" | psql \
|
|
-h "${DB_HOST}" \
|
|
-U "${DB_USER}" \
|
|
-d "${DB_NAME}" \
|
|
--On-error-stop
|
|
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 恢复完成"
|
|
|
|
# 验证
|
|
TABLE_COUNT=$(psql -h "${DB_HOST}" -U "${DB_USER}" -d "${DB_NAME}" -tAc \
|
|
"SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='public'")
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 验证: 公共 schema 下 ${TABLE_COUNT} 张表"
|