f7a720204a
- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用 - 添加所有子项目的完整源代码 - 保留原始 .git 为 .git.bak 备份
85 lines
3.0 KiB
Bash
Executable File
85 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ============================================================
|
|
# 从服务器同步数据库到本地
|
|
# 用法: bash sync-db-from-server.sh
|
|
# ============================================================
|
|
|
|
set -euo pipefail
|
|
|
|
# 服务器配置(从 deploy.sh 读取)
|
|
SERVER="192.168.1.10"
|
|
REMOTE_DB_USER="govai"
|
|
REMOTE_DB_PASS="GovAI@2024Secure"
|
|
REMOTE_DB_NAME="govai_portal"
|
|
|
|
# 本地数据库配置
|
|
LOCAL_DB_USER="freedak"
|
|
LOCAL_DB_NAME="govai_portal"
|
|
BACKUP_FILE="/tmp/govai_portal_$(date +%Y%m%d_%H%M%S).sql"
|
|
|
|
GREEN='\033[0;32m'
|
|
BLUE='\033[0;34m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[0;33m'
|
|
NC='\033[0m'
|
|
|
|
log() { echo -e "${GREEN}[✓]${NC} $1"; }
|
|
step() { echo -e "\n${BLUE}==== $1 ====${NC}"; }
|
|
warn() { echo -e "${YELLOW}[!]${NC} $1"; }
|
|
err() { echo -e "${RED}[✗]${NC} $1"; exit 1; }
|
|
|
|
step "从服务器导出数据库"
|
|
log "服务器: $SERVER"
|
|
log "数据库: $REMOTE_DB_NAME"
|
|
|
|
# 在服务器上导出数据库
|
|
ssh $SERVER "PGPASSWORD='$REMOTE_DB_PASS' pg_dump -h localhost -U $REMOTE_DB_USER -d $REMOTE_DB_NAME --clean --if-exists" > "$BACKUP_FILE"
|
|
|
|
if [ ! -s "$BACKUP_FILE" ]; then
|
|
err "数据库导出失败或文件为空"
|
|
fi
|
|
|
|
log "导出完成: $BACKUP_FILE ($(du -h "$BACKUP_FILE" | cut -f1))"
|
|
|
|
step "导入到本地数据库"
|
|
warn "这将清空本地数据库 $LOCAL_DB_NAME 的所有数据!"
|
|
read -p "确认继续? (yes/no): " confirm
|
|
if [ "$confirm" != "yes" ]; then
|
|
log "取消操作"
|
|
rm -f "$BACKUP_FILE"
|
|
exit 0
|
|
fi
|
|
|
|
# 确保本地数据库存在
|
|
log "检查本地数据库..."
|
|
/Applications/Postgres.app/Contents/Versions/16/bin/psql -U $LOCAL_DB_USER -d postgres -tc "SELECT 1 FROM pg_database WHERE datname='$LOCAL_DB_NAME'" | grep -q 1 || \
|
|
/Applications/Postgres.app/Contents/Versions/16/bin/psql -U $LOCAL_DB_USER -d postgres -c "CREATE DATABASE $LOCAL_DB_NAME;"
|
|
|
|
# 导入数据
|
|
log "导入数据到本地..."
|
|
/Applications/Postgres.app/Contents/Versions/16/bin/psql -U $LOCAL_DB_USER -d $LOCAL_DB_NAME -f "$BACKUP_FILE" 2>&1 | tail -20
|
|
|
|
log "导入完成"
|
|
|
|
# 验证数据
|
|
step "验证数据"
|
|
user_count=$(/Applications/Postgres.app/Contents/Versions/16/bin/psql -U $LOCAL_DB_USER -d $LOCAL_DB_NAME -tc "SELECT COUNT(*) FROM users;")
|
|
app_count=$(/Applications/Postgres.app/Contents/Versions/16/bin/psql -U $LOCAL_DB_USER -d $LOCAL_DB_NAME -tc "SELECT COUNT(*) FROM applications;")
|
|
|
|
log "用户数: $(echo $user_count | xargs)"
|
|
log "应用数: $(echo $app_count | xargs)"
|
|
|
|
# 清理备份文件
|
|
read -p "是否删除备份文件? (yes/no): " delete_backup
|
|
if [ "$delete_backup" = "yes" ]; then
|
|
rm -f "$BACKUP_FILE"
|
|
log "备份文件已删除"
|
|
else
|
|
log "备份文件保留在: $BACKUP_FILE"
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${GREEN}════════════════════════════════════════${NC}"
|
|
echo -e "${GREEN} 数据库同步完成!${NC}"
|
|
echo -e "${GREEN} 本地数据库: $LOCAL_DB_NAME${NC}"
|
|
echo -e "${GREEN}════════════════════════════════════════${NC}" |