2.2 KiB
2.2 KiB
数据迁移工具
用于将测试数据库的数据迁移到生产数据库,避免ID冲突,使用事务确保数据一致性。
功能特性
- ✅ 自动避免ID冲突(使用数据库自增ID)
- ✅ 使用事务确保每个任务和结果数据的一致性
- ✅ 自动跳过已存在的任务(基于task_uuid)
- ✅ 保留原始时间戳
- ✅ 处理NULL值
- ✅ 详细的日志输出和统计信息
使用方法
基本用法
# 从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
编译后使用
# 编译
go build -o migrate cmd/migrate/main.go
# 运行
./migrate -test-env=dev -prod-env=prod
工作原理
- 连接数据库:同时连接测试数据库和生产数据库
- 读取数据:从测试数据库读取所有任务和结果数据(LEFT JOIN)
- 检查重复:基于
task_uuid检查生产数据库中是否已存在 - 事务迁移:为每个任务创建独立事务:
- 创建任务记录(自动生成新ID)
- 如果存在结果数据,创建结果记录(关联新任务ID)
- 提交事务或回滚
- 统计报告:输出迁移统计信息
注意事项
- 配置文件:确保
config/config_dev.yaml和config/config_prod.yaml存在且配置正确 - 数据库权限:确保数据库用户有读写权限
- 网络连接:确保能同时连接到两个数据库
- 数据备份:迁移前建议备份生产数据库
- 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 条
数据迁移完成!