Skip to content

11.3 数据库迁移 ​

概述

部署场景的两类迁移:① 全新环境初始化(导入定稿脚本);② 存量环境跨方言迁移(整库迁移器)。迁移器用法详见 7.6 数据库迁移工具,本节聚焦部署视角。

场景一:全新环境初始化 ​

sh
# MySQL(推荐基准)
mysql -uroot -p -e "CREATE DATABASE \`easygoadmin.goframe.elevue\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
mysql -uroot -p easygoadmin.goframe.elevue < document/mysql/easygoadmin.goframe.elevue.sql

# 验证:25 张表 + admin 账号 + 种子数据(菜单/字典/参数/租户)

脚本含超管账号(admin/123456——上线后立即改密)、菜单权限树、字典种子、参数种子。

场景二:跨方言整库迁移 ​

sh
go run ./cmd/migrator \
  -src-type=mysql -src-host=127.0.0.1 -src-hostport=3306 \
  -src-database=easygoadmin.goframe.elevue -src-username=root -src-password=root \
  -dst-type=pgsql -dst-host=127.0.0.1 -dst-hostport=5432 \
  -dst-database=easygoadmin.goframe.elevue -dst-username=postgres -dst-password=123456 \
  -drop-target-first

部署注意:

text
□ 目标库确认无他用(-drop-target-first 清空全部表!)
□ 迁移前备份源库与目标库
□ 先 -tables 白名单迁小表验证方言转换
□ 观察五阶段输出与行数校验 PASS/FAIL
□ FAIL 表排查后 -tables 单独重迁
□ 迁移后切应用配置:database.default.type/link → 重启

限制提醒:无外键/视图/存储过程;无主键表拒绝搬运;mssql/oracle 作为源库时二级索引丢失;逐表串行。

场景三:存量环境版本升级(同方言) ​

text
本项目无自动 schema 升级工具——增量变更走 ALTER 工作流:

1. 以 document/mysql/ 定稿为基准整理 ALTER 脚本
   (含列注释枚举、uk_* 唯一索引)
2. 备份 → 执行 ALTER
3. gf gen dao 刷新(如本地验证)→ 部署新二进制
4. 同步 document/ 其余四方言脚本
5. 租户级新表 → hooks.tenantTables 登记(随代码发布)
6. 验证:登录/核心接口/新功能冒烟

版本升级通用纪律 ​

text
□ 数据库变更先行(向后兼容的加列/加表最安全)
□ 应用滚动(新版本兼容旧数据结构)
□ 破坏性变更(删列/改枚举值)走双版本过渡:先发兼容版 → 清理旧结构
□ 每步可回滚(备份 + 旧二进制)
□ 黄金样本接口回归(hack/golden)

定稿脚本与漂移 ​

text
五方言脚本位于 document/{mysql,postgresql,sqlserver,oracle,sqlite}/
MySQL 版为规范基准,后四份待人工校对

已知漂移注意:以 resource 定稿逻辑为准核对 uk_* 索引——
导入后验证 13 个唯一索引齐全(并发唯一性最终保证)

小蚂蚁云团队 · 提供技术支持