Files
easygoadmin-wiki/EasyGoAdmin_Gin_EleVue/zh/tools/db-migrate.md
T
2026-10-25 17:24:27 +08:00

2.3 KiB
Raw Blame History

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 无注释机制——作为目标时注释不保留,作为源时注释恒为空

相关