refactor: 分离数据库导出和导入脚本,优化文件结构

改进内容:
1. 创建独立的 import_database.sh 导入脚本
   - 从 doc/database/backup/ 读取 SQL 文件
   - 支持导入到 dev/test/prod 环境
   - 自动验证导入结果

2. 简化 export_database.sh 导出脚本
   - 只负责导出数据库到 backup 文件夹
   - 移除导入功能,职责单一
   - 添加后续操作提示

3. 优化文件结构
   - backup 文件夹只保留 SQL 备份文件
   - 配置文件和脚本统一放在根目录
   - 移动操作指南到 doc/database/ 目录

4. 更新操作指南
   - 详细说明两个脚本的用法
   - 完整的迁移流程示例
   - 常见问题解答

文件变更:
- 新增: import_database.sh (独立导入脚本)
- 修改: export_database.sh (简化为导出专用)
- 移动: export_guide.md -> doc/database/数据库迁移操作指南.md
- 删除: doc/database/backup/ 中的非 SQL 文件

使用方法:
- 导出: ./export_database.sh
- 导入: ./import_database.sh <dev|test|prod>
This commit is contained in:
wkc
2026-02-28 15:18:01 +08:00
parent 4d4076227f
commit 79f00f30d8
3 changed files with 432 additions and 220 deletions

View File

@@ -4,16 +4,46 @@
本文档提供 CCDI 纪检初核系统数据库迁移的详细操作步骤,包括从开发环境导出数据库和导入到生产/测试环境。
## 脚本说明
项目提供两个独立的脚本:
1. **export_database.sh** - 数据库导出脚本
- 从开发环境导出数据库
- 生成表结构和数据文件到 `doc/database/backup/` 文件夹
2. **import_database.sh** - 数据库导入脚本
- 从 `doc/database/backup/` 文件夹读取备份文件
- 导入到指定的目标环境dev/test/prod
## 文件结构
```
项目根目录/
├── export_database.sh # 导出脚本
├── import_database.sh # 导入脚本
├── db_config.conf.template # 配置模板
├── db_config.conf # 实际配置(不提交到 Git
└── doc/
└── database/
├── backup/ # 备份文件夹
│ ├── .gitkeep
│ ├── ccdi_structure.sql # 表结构(~60KB
│ └── ccdi_data.sql # 数据文件(~5.7MB
└── alter_collation_to_general_ci.sql # 排序规则修改脚本
```
## 前置条件
### 必需工具
- MySQL 客户端工具(包含 mysqldump 和 mysql 命令)
- Bash shell 环境
- Bash shell 环境Windows 用户可使用 Git Bash
- 网络访问权限(能连接源数据库和目标数据库)
### 检查 mysqldump 是否安装
### 检查工具是否安装
```bash
mysqldump --version
mysql --version
```
如果未安装,请根据操作系统安装 MySQL 客户端:
@@ -73,6 +103,10 @@ cat db_config.conf | grep -E "^[A-Z]"
### 执行导出
```bash
# 方式1: 使用默认命令
./export_database.sh
# 方式2: 显式指定命令
./export_database.sh export
```
@@ -84,15 +118,16 @@ cat db_config.conf | grep -E "^[A-Z]"
[INFO] mysqldump 命令检查通过
[INFO] 开始导出表结构...
[INFO] 表结构导出成功: doc/database/backup/ccdi_structure.sql
[INFO] 文件大小: XXX
[INFO] 文件大小: 60K
[INFO] 开始导出数据...
[INFO] 数据导出成功: doc/database/backup/ccdi_data.sql
[INFO] 文件大小: XXX
[INFO] 文件大小: 5.7M
[INFO] 验证导出文件...
[INFO] 导出文件验证通过
[INFO] 表结构文件: doc/database/backup/ccdi_structure.sql (XXX)
[INFO] 数据文件: doc/database/backup/ccdi_data.sql (XXX)
[INFO] 表结构文件: doc/database/backup/ccdi_structure.sql (60K)
[INFO] 数据文件: doc/database/backup/ccdi_data.sql (5.7M)
[INFO] ========== 数据库导出完成 ==========
[INFO] 使用 ./import_database.sh <env> 导入到目标环境
```
### 验证导出文件
@@ -103,8 +138,8 @@ ls -lh doc/database/backup/
```
应该看到:
- `ccdi_structure.sql` - 表结构文件
- `ccdi_data.sql` - 数据文件
- `ccdi_structure.sql` - 表结构文件~60KB
- `ccdi_data.sql` - 数据文件~5.7MB
**2. 检查字符集声明**
```bash
@@ -119,7 +154,7 @@ SET CHARACTER SET utf8mb4;
**3. 检查文件内容**
```bash
# 查看表结构
# 查看表数量
grep "CREATE TABLE" doc/database/backup/ccdi_structure.sql | wc -l
# 查看数据量INSERT 语句数量)
@@ -153,30 +188,42 @@ CREATE DATABASE ccdi CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
### 导入到测试环境
```bash
./export_database.sh import test
./import_database.sh test
```
### 导入到生产环境
```bash
./export_database.sh import production
./import_database.sh production
```
或简写:
```bash
./export_database.sh import prod
./import_database.sh prod
```
### 导入到开发环境
```bash
./import_database.sh dev
```
### 预期输出
```
[INFO] ========== 开始导入数据库到 test 环境 ==========
[INFO] 配置文件加载成功
[INFO] mysql 命令检查通过
[INFO] 检查备份文件...
[INFO] 备份文件检查通过
[INFO] 表结构文件: doc/database/backup/ccdi_structure.sql (60K)
[INFO] 数据文件: doc/database/backup/ccdi_data.sql (5.7M)
[INFO] 导入表结构到 test 环境: XXX:3306/ccdi
[INFO] 表结构导入成功
[INFO] 导入数据到 test 环境: XXX:3306/ccdi
[INFO] 数据导入成功
[INFO] 验证导入结果...
[INFO] 目标数据库表数量: XX
[INFO] 目标数据库表数量: 42
[INFO] sys_user 表数据行数: XX
[INFO] 数据库字符集: utf8mb4
[INFO] ========== 数据库导入完成 ==========
@@ -237,6 +284,9 @@ SELECT user_name, nick_name FROM sys_user LIMIT 10;
-- 查询字典数据
SELECT dict_label, dict_value FROM sys_dict_data LIMIT 10;
-- 查询业务表
SELECT name, person_type FROM ccdi_biz_intermediary LIMIT 10;
```
确保中文字符显示正常,无乱码。
@@ -258,7 +308,7 @@ nano db_config.conf
**2. 导出数据库**
```bash
./export_database.sh export
./export_database.sh
```
**3. 验证导出文件**
@@ -269,7 +319,7 @@ head -20 doc/database/backup/ccdi_structure.sql
**4. 先在测试环境验证**
```bash
./export_database.sh import test
./import_database.sh test
```
**5. 验证测试环境**
@@ -278,7 +328,7 @@ head -20 doc/database/backup/ccdi_structure.sql
**6. 导入到生产环境**
```bash
./export_database.sh import production
./import_database.sh prod
```
**7. 验证生产环境**
@@ -352,6 +402,14 @@ cp db_config.conf.template db_config.conf
- 使用具有足够权限的用户(如 root
- 或授予用户必要权限
### 8. 备份文件不存在
**错误信息**: `表结构文件不存在: doc/database/backup/ccdi_structure.sql`
**解决**:
- 先执行导出:`./export_database.sh`
- 检查 backup 文件夹中是否有 SQL 文件
## 回滚方案
如果迁移失败或出现问题:
@@ -379,6 +437,7 @@ cp db_config.conf.template db_config.conf
4. **字符集**:
- 确保所有步骤都使用 utf8mb4 字符集
- 验证阶段重点检查中文数据
- 表结构文件不再包含显式的 COLLATE 配置(使用默认 utf8mb4_general_ci
## 技术支持
@@ -390,9 +449,11 @@ cp db_config.conf.template db_config.conf
## 相关文件
- 自动化脚本: `export_database.sh`
- 导出脚本: `export_database.sh`
- 导入脚本: `import_database.sh`
- 配置模板: `db_config.conf.template`
- 实际配置: `db_config.conf`
- 表结构文件: `doc/database/backup/ccdi_structure.sql`
- 数据文件: `doc/database/backup/ccdi_data.sql`
- 排序规则修改脚本: `doc/database/alter_collation_to_general_ci.sql`
- 设计文档: `docs/plans/2026-02-28-database-migration-design.md`