Files
doc_ai_backed/cmd/migrate/README.md
2026-01-27 17:40:15 +08:00

74 lines
2.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 数据迁移工具
用于将测试数据库的数据迁移到生产数据库避免ID冲突使用事务确保数据一致性。
## 功能特性
- ✅ 自动避免ID冲突使用数据库自增ID
- ✅ 使用事务确保每个任务和结果数据的一致性
- ✅ 自动跳过已存在的任务基于task_uuid
- ✅ 保留原始时间戳
- ✅ 处理NULL值
- ✅ 详细的日志输出和统计信息
## 使用方法
### 基本用法
```bash
# 从dev环境迁移到prod环境
go run cmd/migrate/main.go -test-env=dev -prod-env=prod
# 从prod环境迁移到dev环境测试反向迁移
go run cmd/migrate/main.go -test-env=prod -prod-env=dev
```
### 参数说明
- `-test-env`: 测试环境配置文件名dev/prod默认值dev
- `-prod-env`: 生产环境配置文件名dev/prod默认值prod
### 编译后使用
```bash
# 编译
go build -o migrate cmd/migrate/main.go
# 运行
./migrate -test-env=dev -prod-env=prod
```
## 工作原理
1. **连接数据库**:同时连接测试数据库和生产数据库
2. **读取数据**从测试数据库读取所有任务和结果数据LEFT JOIN
3. **检查重复**:基于`task_uuid`检查生产数据库中是否已存在
4. **事务迁移**:为每个任务创建独立事务:
- 创建任务记录自动生成新ID
- 如果存在结果数据创建结果记录关联新任务ID
- 提交事务或回滚
5. **统计报告**:输出迁移统计信息
## 注意事项
1. **配置文件**:确保`config/config_dev.yaml``config/config_prod.yaml`存在且配置正确
2. **数据库权限**:确保数据库用户有读写权限
3. **网络连接**:确保能同时连接到两个数据库
4. **数据备份**:迁移前建议备份生产数据库
5. **ID冲突**脚本会自动处理ID冲突使用数据库自增ID不会覆盖现有数据
## 输出示例
```
从测试数据库读取到 100 条任务记录
[1/100] 创建任务成功: task_uuid=xxx, 新ID=1001
[1/100] 创建结果成功: task_id=1001
[2/100] 跳过已存在的任务: task_uuid=yyy, id=1002
...
迁移完成统计:
成功: 95 条
跳过: 3 条
失败: 2 条
数据迁移完成!
```