204 lines
5.4 KiB
Markdown
204 lines
5.4 KiB
Markdown
# 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"
|
||
```
|
||
|
||
这样可以确保始终有最新的数据备份可用于新环境部署。 |