ETest-Vue-FastAPI/docs/MIGRATION_GUIDE.md

2.9 KiB
Raw Blame History

数据库迁移执行指南

迁移脚本列表

阶段 脚本文件 说明
第一阶段 20260321_phase1_base_tables.sql 基础表:测试类别扩展、权限表
第二阶段 20260321_phase2_workorder_extend.sql 工单扩展:测试数据、重测记录
第三阶段 20260321_phase3_report_tables.sql 报告相关:报告表、审核记录

执行前准备

1. 备份数据库

# 使用 mysqldump 备份
mysqldump -u root -p etest > etest_backup_20260321.sql

2. 配置数据库连接

创建 .env 文件:

DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASS=your_password
DB_NAME=etest

执行方式

方式1: 使用批处理脚本(推荐)

# 执行全部三个阶段
migrate.bat all

# 或分阶段执行
migrate.bat phase1
migrate.bat phase2
migrate.bat phase3

方式2: 使用 MySQL 命令行

# 第一阶段
mysql -u root -p etest < sql/migration/20260321_phase1_base_tables.sql

# 第二阶段
mysql -u root -p etest < sql/migration/20260321_phase2_workorder_extend.sql

# 第三阶段
mysql -u root -p etest < sql/migration/20260321_phase3_report_tables.sql

方式3: 使用 MySQL Workbench

  1. 打开 MySQL Workbench
  2. 连接到 etest 数据库
  3. File → Open SQL Script
  4. 依次打开三个 SQL 文件并执行

执行后验证

1. 检查表结构

-- 检查 test_category 扩展
DESCRIBE test_category;
-- 应该看到: parent_id, level, category_code, sort_order, report_config_type

-- 检查 test_permission 表
SHOW TABLES LIKE 'test_permission';

-- 检查 test_work_order 扩展
DESCRIBE test_work_order;
-- 应该看到: priority, expected_finish_date, claimed_by 等新字段

-- 检查报告相关表
SHOW TABLES LIKE 'test_report%';
SHOW TABLES LIKE 'report%';

2. 检查索引

-- 检查索引
SHOW INDEX FROM test_work_order;
SHOW INDEX FROM test_permission;

3. 验证现有数据

-- 检查现有数据是否完整
SELECT COUNT(*) FROM test_work_order;
SELECT COUNT(*) FROM test_category;

-- 检查新增字段是否为 NULL符合预期
SELECT priority, expected_finish_date, claimed_by 
FROM test_work_order 
LIMIT 5;

回滚方案

如果迁移失败,使用备份恢复:

mysql -u root -p etest < etest_backup_20260321.sql

常见问题

Q1: 执行时报错 "Table already exists"

原因: 表已存在 解决: 确认是否重复执行,或手动删除后重新执行

Q2: 字段已存在

原因: 之前已添加过这些字段 解决: 使用 IF NOT EXISTS 的脚本已处理此情况,可忽略

Q3: 外键约束错误

原因: 数据不一致 解决: 先修复数据,再执行迁移

下一步

迁移完成后:

  1. 更新 docs/AGENT_HANDOVER.md 标记迁移完成
  2. 生成后端实体代码
  3. 修改现有实体
  4. 实现业务逻辑