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

5.4 KiB
Raw Permalink Blame History

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. 设置环境变量

export DB_HOST=localhost          # 数据库主机
export DB_PORT=5432              # 数据库端口
export DB_NAME=qaup              # 数据库名称
export DB_USER=postgres          # 数据库用户
export EXPORT_DIR=./export       # 导出目录

2. 执行导出(推荐方式)

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. 其他导出选项

# 导出分层初始数据(推荐)
./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 容器,数据会自动导入
cp export/initial_data_complete.sql deploy/docker/postgres/initial_data.sql
./deploy.sh install

方法二:分层导入

如果需要选择性导入,可以分别处理各层数据:

# 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

方法三:手动导入

如果容器已经运行,可以手动导入数据:

# 进入数据库容器
docker exec -it qaup-postgres psql -U postgres -d qaup

# 在容器内执行
\i /docker-entrypoint-initdb.d/initial_data.sql

验证导入

1. 检查表数据

-- 检查用户表
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. 连接失败

# 检查数据库连接
pg_isready -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME

2. 权限问题

# 确保用户有足够权限
GRANT SELECT ON ALL TABLES IN SCHEMA public TO your_user;

3. 导入失败

  • 检查 SQL 文件语法
  • 查看 PostgreSQL 日志
  • 确认表结构已正确创建

4. 数据不完整

  • 检查导出日志
  • 验证源数据库数据完整性
  • 重新执行导出过程

最佳实践

  1. 定期备份: 建议定期导出数据作为备份
  2. 版本控制: 将初始数据文件纳入版本控制
  3. 环境隔离: 不同环境使用不同的数据集
  4. 测试验证: 在测试环境先验证导入过程
  5. 文档更新: 及时更新数据结构变更文档

自动化脚本

可以创建自动化脚本定期导出数据:

#!/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"

这样可以确保始终有最新的数据备份可用于新环境部署。