Files
MyAiDesk/GovAI/sync-db-from-server.sh
T
freedak f7a720204a Update: 将子项目从 submodule 转为完整内容
- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用
- 添加所有子项目的完整源代码
- 保留原始 .git 为 .git.bak 备份
2026-07-04 19:20:46 +08:00

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}"