2.9 KiB
2.9 KiB
数据库迁移执行指南
迁移脚本列表
| 阶段 | 脚本文件 | 说明 |
|---|---|---|
| 第一阶段 | 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
- 打开 MySQL Workbench
- 连接到 etest 数据库
- File → Open SQL Script
- 依次打开三个 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: 外键约束错误
原因: 数据不一致 解决: 先修复数据,再执行迁移
下一步
迁移完成后:
- ✅ 更新
docs/AGENT_HANDOVER.md标记迁移完成 - ⏳ 生成后端实体代码
- ⏳ 修改现有实体
- ⏳ 实现业务逻辑