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

68 lines
2.3 KiB
Markdown
Raw 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.
# 7.6 数据库迁移工具
:::tip 概述
`cmd/migrator` 实现**跨库整库迁移**:源库内省 → 目标方言 DDL 生成 → 分批搬运 → 序列/自增修复。支持五方言互迁(Oracle 经构建标签启用)。
:::
## 迁移流水线
```text
① 内省源库(introspect):表结构、索引、表/列注释、数据
↓
② DDL 生成(ddl):按目标方言语法转换建表语句(含索引与表/列注释)
↓
③ 建表执行(migrate 框架内)
↓
④ 分批搬运(copy):按主键分批 SELECT→INSERT,控制内存
↓
⑤ 序列修复:自增/序列对齐最大 ID
```
## 使用(make migrator)
```bash
make migrator ARGS="-src-type=mysql -src-database=db1 ... "
```
参数覆盖源/目标的类型与连接信息。方言能力:
| 方言 | 支持 |
|---|---|
| mysql / postgres / sqlserver / sqlite | 内置 |
| oracle | `-tags oracle` 构建启用(godror 驱动) |
## 代码位置
```text
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 数据库初始化](/zh/quickstart/database-init.html)(全新初始化用种子脚本)
- [11.3 数据库初始化与迁移](/zh/deploy/db-migrate.html)(生产视角)