2.3 KiB
2.3 KiB
7.6 数据库迁移工具
:::tip 概述
cmd/migrator 实现跨库整库迁移:源库内省 → 目标方言 DDL 生成 → 分批搬运 → 序列/自增修复。支持五方言互迁(Oracle 经构建标签启用)。
:::
迁移流水线
① 内省源库(introspect):表结构、索引、表/列注释、数据
↓
② DDL 生成(ddl):按目标方言语法转换建表语句(含索引与表/列注释)
↓
③ 建表执行(migrate 框架内)
↓
④ 分批搬运(copy):按主键分批 SELECT→INSERT,控制内存
↓
⑤ 序列修复:自增/序列对齐最大 ID
使用(make migrator)
make migrator ARGS="-src-type=mysql -src-database=db1 ... "
参数覆盖源/目标的类型与连接信息。方言能力:
| 方言 | 支持 |
|---|---|
| mysql / postgres / sqlserver / sqlite | 内置 |
| oracle | -tags oracle 构建启用(godror 驱动) |
代码位置
internal/migrate/
├── model.go 迁移模型(表/列/索引抽象)
├── introspect.go 源库内省
├── ddl.go 目标方言 DDL 生成
├── copy.go 分批数据搬运
└── migrate.go 流程编排
cmd/migrator/ CLI 入口
方言 DDL 差异(类型映射、引号、自增语法)全部收敛在 ddl.go——新增方言只需补类型映射表。
典型场景
| 场景 | 说明 |
|---|---|
| 换数据库 | MySQL → PostgreSQL,应用配置同步改 driver |
| 环境搬迁 | 测试库数据复制到生产(注意脱敏) |
| 部分迁移后整库 | 项目内种子脚本(document/*/)用于初始化,migrator 用于存量搬迁 |
注意事项
- 迁移前停写(避免搬运期间数据变动)
- 大库分批参数按表容量调(内存与锁时间平衡)
- 目标库编码统一 utf8mb4
- 迁移后核对行数与自增/序列值
- 表/列注释随结构一并迁移:mysql 内联列定义、pgsql/oracle 走 COMMENT ON 语句、mssql 走扩展属性 MS_Description;sqlite 无注释机制——作为目标时注释不保留,作为源时注释恒为空
相关
- 2.2 数据库初始化(全新初始化用种子脚本)
- 11.3 数据库初始化与迁移(生产视角)