QAUP_Management/deploy/docs/数据导出导入指南.md

204 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# QAUP 数据导出导入指南
## 概述
本指南介绍如何从现有 QAUP 数据库导出数据,并在新环境中导入这些数据。我们采用分层数据管理策略,将数据分为不同类别,以便灵活管理。
## 数据分类
### 1. 系统基础配置数据(必需)
- **包含表**: `sys_config`, `sys_dict_type`, `sys_dict_data`, `sys_dept`, `sys_post`, `sys_role`, `sys_menu`, `sys_user`, `sys_user_role`, `sys_user_post`, `sys_role_menu`, `sys_role_dept`, `sys_notice`
- **用途**: 系统运行的基础配置,包括菜单、角色、权限等
- **特点**: 必须导入,否则系统无法正常运行
### 2. 业务基础数据(推荐)
- **包含表**: `sys_vehicle_type`, `airport_areas`, `spatial_rules`, `spatial_rule_vehicle_types`, `transport_routes`
- **用途**: 业务配置数据,如车辆类型、机场区域、空间规则等
- **特点**: 建议导入,包含实际业务配置
### 3. 示例数据(可选)
- **包含表**: `sys_vehicle_info`
- **用途**: 示例车辆信息,用于演示和测试
- **特点**: 可选导入,生产环境可能不需要
### 4. 实时数据(不导出)
- **包含表**: `vehicle_locations`, `vehicle_trajectories`, `vehicle_commands`, `geofence_events`, `uv_violation_events`, `sys_logininfor`, `sys_oper_log`, `sys_job_log`
- **用途**: 实时运行数据、日志等
- **特点**: 不导出,新环境启动后自动生成
## 数据导出
### 前提条件
- 安装 PostgreSQL 客户端工具(包含 `pg_dump`
- 能够连接到现有的 QAUP 数据库
- 有足够的磁盘空间存储导出文件
### 导出步骤
#### 1. 设置环境变量
```bash
export DB_HOST=localhost # 数据库主机
export DB_PORT=5432 # 数据库端口
export DB_NAME=qaup # 数据库名称
export DB_USER=postgres # 数据库用户
export EXPORT_DIR=./export # 导出目录
```
#### 2. 执行导出(推荐方式)
```bash
cd deploy/docker/postgres
./db-manager.sh export-initial
```
这将生成以下文件:
- `01_system_data.sql` - 系统基础配置数据
- `02_business_data.sql` - 业务基础数据
- `03_sample_data.sql` - 示例数据
- `initial_data_complete.sql` - 合并的完整初始数据文件
#### 3. 其他导出选项
```bash
# 导出分层初始数据(推荐)
./db-manager.sh export-initial
# 导出完整数据库
./db-manager.sh export-all
# 仅导出表结构
./db-manager.sh export-schema
# 数据库备份
./db-manager.sh backup
```
## 数据导入
### 方法一:使用合并文件(推荐)
1.`initial_data_complete.sql` 复制到 `deploy/docker/postgres/initial_data.sql`
2. 启动 Docker 容器,数据会自动导入
```bash
cp export/initial_data_complete.sql deploy/docker/postgres/initial_data.sql
./deploy.sh install
```
### 方法二:分层导入
如果需要选择性导入,可以分别处理各层数据:
```bash
# 1. 复制系统基础数据(必需)
cp export/01_system_data.sql deploy/docker/postgres/initial_data.sql
# 2. 可选:追加业务数据
cat export/02_business_data.sql >> deploy/docker/postgres/initial_data.sql
# 3. 可选:追加示例数据
cat export/03_sample_data.sql >> deploy/docker/postgres/initial_data.sql
# 4. 启动容器
./deploy.sh install
```
### 方法三:手动导入
如果容器已经运行,可以手动导入数据:
```bash
# 进入数据库容器
docker exec -it qaup-postgres psql -U postgres -d qaup
# 在容器内执行
\i /docker-entrypoint-initdb.d/initial_data.sql
```
## 验证导入
### 1. 检查表数据
```sql
-- 检查用户表
SELECT COUNT(*) FROM sys_user;
-- 检查菜单表
SELECT COUNT(*) FROM sys_menu;
-- 检查车辆类型表
SELECT COUNT(*) FROM sys_vehicle_type;
-- 检查机场区域表
SELECT COUNT(*) FROM airport_areas;
```
### 2. 测试登录
- 使用导出的管理员账号登录系统
- 检查菜单和权限是否正确显示
- 验证业务功能是否正常
## 注意事项
### 1. 密码处理
- 导出的用户密码是加密的,可以直接使用
- 如果需要重置密码,请在系统中操作
### 2. 序列值
- 导出脚本会自动更新序列值
- 确保新插入的数据不会产生主键冲突
### 3. 外键约束
- 导入时会临时禁用触发器
- 导入完成后会重新启用
### 4. 数据一致性
- 建议在业务低峰期进行导出
- 确保导出过程中数据不被修改
## 故障排除
### 1. 连接失败
```bash
# 检查数据库连接
pg_isready -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME
```
### 2. 权限问题
```bash
# 确保用户有足够权限
GRANT SELECT ON ALL TABLES IN SCHEMA public TO your_user;
```
### 3. 导入失败
- 检查 SQL 文件语法
- 查看 PostgreSQL 日志
- 确认表结构已正确创建
### 4. 数据不完整
- 检查导出日志
- 验证源数据库数据完整性
- 重新执行导出过程
## 最佳实践
1. **定期备份**: 建议定期导出数据作为备份
2. **版本控制**: 将初始数据文件纳入版本控制
3. **环境隔离**: 不同环境使用不同的数据集
4. **测试验证**: 在测试环境先验证导入过程
5. **文档更新**: 及时更新数据结构变更文档
## 自动化脚本
可以创建自动化脚本定期导出数据:
```bash
#!/bin/bash
# auto-export.sh
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="./backups/$DATE"
mkdir -p "$BACKUP_DIR"
export EXPORT_DIR="$BACKUP_DIR"
./export-data.sh -i
echo "数据导出完成: $BACKUP_DIR"
```
这样可以确保始终有最新的数据备份可用于新环境部署。