Files
2026-01-27 21:56:21 +08:00
..
2026-01-27 21:56:21 +08:00
2026-01-27 17:40:15 +08:00

数据迁移工具

用于将测试数据库的数据迁移到生产数据库避免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

工作原理

  1. 连接数据库:同时连接测试数据库和生产数据库
  2. 读取数据从测试数据库读取所有任务和结果数据LEFT JOIN
  3. 检查重复:基于task_uuid检查生产数据库中是否已存在
  4. 事务迁移:为每个任务创建独立事务:
    • 创建任务记录自动生成新ID
    • 如果存在结果数据创建结果记录关联新任务ID
    • 提交事务或回滚
  5. 统计报告:输出迁移统计信息

注意事项

  1. 配置文件:确保config/config_dev.yamlconfig/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 条
数据迁移完成!