Files
easygoadmin-wiki/EasyGoAdmin_GoFrame_NaiveVue/zh/deploy/db-migrate.md
T
2026-10-20 21:53:26 +08:00

76 lines
2.8 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.
# 11.3 数据库迁移
:::tip 概述
部署场景的两类迁移:① 全新环境初始化(导入定稿脚本);② 存量环境跨方言迁移(整库迁移器)。迁移器用法详见 [7.6 数据库迁移工具](../tools/db-migrate),本节聚焦部署视角。
:::
## 场景一:全新环境初始化
```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 个唯一索引齐全(并发唯一性最终保证)
```