Files
EasyGoAdmin_GoFrame_EleVue/document/数据迁移命令.txt
T
2026-10-20 11:37:25 +08:00

155 lines
7.0 KiB
Plaintext
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.
数据迁移命令(cmd/migrator)
================================
整库迁移:源库内省(表/列/索引/注释)→ 中间表示 → 目标方言 DDL → 分批搬运 → 序列修复。
支持五种数据库:mysql / pgsql / sqlite / mssql / oracle。
在仓库根目录执行(go run ./cmd/migrator ...)。
一、参数说明
================================
源库连接(6 个):
-src-type 源库类型:mysql / pgsql / sqlite / mssql / oracle(默认 mysql)
-src-host 源库地址(默认 127.0.0.1)
-src-hostport 源库端口(默认 3306)
-src-database 源库库名(sqlite 填数据库文件路径,必填)
-src-username 源库用户名(默认 root)
-src-password 源库密码
目标库连接(6 个):
-dst-type 目标库类型:mysql / pgsql / sqlite / mssql / oracle(默认 pgsql)
-dst-host 目标库地址(默认 127.0.0.1)
-dst-hostport 目标库端口(默认 5432)
-dst-database 目标库库名(sqlite 填数据库文件路径,必填;不存在时自动创建)
-dst-username 目标库用户名(默认 postgres)
-dst-password 目标库密码
迁移行为(3 个):
-drop-target-first 迁移前清空目标库全部表(不加则目标已有同名表时该表报错跳过)
-tables 只迁指定表,逗号分隔,如 "goframe_user,goframe_level"(留空迁全部)
-batch-size 数据搬运批大小,默认 500(大表可调大提速)
二、常用迁移命令
================================
【MySQL → PostgreSQL】(最常用,参照示例)
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
【MySQL → MySQL】(跨实例/跨服务器)
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=mysql -dst-host=192.168.1.100 -dst-hostport=3306 \
-dst-database=easygoadmin.goframe.elevue -dst-username=root -dst-password=newpass \
-drop-target-first
【MySQL → SQLite】(导出为本地文件)
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=sqlite -dst-database=./easygoadmin.db \
-drop-target-first
【SQLite → MySQL】(本地文件导入)
go run ./cmd/migrator \
-src-type=sqlite -src-database=./easygoadmin.db \
-dst-type=mysql -dst-host=127.0.0.1 -dst-hostport=3306 \
-dst-database=easygoadmin.goframe.elevue -dst-username=root -dst-password=root \
-drop-target-first
【MySQL → SQL Server】
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=mssql -dst-host=127.0.0.1 -dst-hostport=1433 \
-dst-database=easygoadmin -dst-username=sa -dst-password=Password1 \
-drop-target-first
【MySQL → Oracle】
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=oracle -dst-host=127.0.0.1 -dst-hostport=1521 \
-dst-database=XE -dst-username=system -dst-password=oracle \
-drop-target-first
【PostgreSQL → MySQL】
go run ./cmd/migrator \
-src-type=pgsql -src-host=127.0.0.1 -src-hostport=5432 \
-src-database=easygoadmin.goframe.elevue -src-username=postgres -src-password=123456 \
-dst-type=mysql -dst-host=127.0.0.1 -dst-hostport=3306 \
-dst-database=easygoadmin.goframe.elevue -dst-username=root -dst-password=root \
-drop-target-first
【PostgreSQL → SQLite】
go run ./cmd/migrator \
-src-type=pgsql -src-host=127.0.0.1 -src-hostport=5432 \
-src-database=easygoadmin.goframe.elevue -src-username=postgres -src-password=123456 \
-dst-type=sqlite -dst-database=./easygoadmin.db \
-drop-target-first
三、进阶用法
================================
【只迁指定表】(逗号分隔,留空迁全部)
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 \
-tables "goframe_user,goframe_level,goframe_dept" \
-drop-target-first
【大表调大批】(city 表数十万行时提速)
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 \
-batch-size=2000 \
-drop-target-first
【不加 -drop-target-first】(目标已有同名表则该表报错跳过,适合增量补表)
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
四、迁移流程与输出说明
================================
执行后按 5 阶段输出(每阶段含耗时,末尾汇总):
[1/5] 建目标库 —— 目标库不存在则自动创建
[2/5] 建表结构 —— 含列注释/表注释/索引,输出表数与索引数
[3/5] 逐表迁移数据 —— 分批搬运,每批输出 +N(累计 M),每表输出总行数与耗时
[4/5] 重置自增序列 —— pgsql 等显式续接,保证目标库可继续插入
[5/5] 逐表行数校验 —— COUNT(*) 对比源/目标,逐表输出 PASS/FAIL
末尾汇总格式:
[迁移完成] 成功:N 行 / M 张表 / 总耗时 Xs
全部 PASS 退出码为 0;存在失败表或行数不一致退出码为 1。
五、注意事项
================================
1. 目标库不存在时自动创建(mysql/pgsql/mssql 支持;oracle/sqlite 无需预建)。
2. 无主键的表会报错跳过(分页搬运依赖主键排序),请先补主键再迁。
3. 迁移全程绕过业务钩子(租户隔离/软删除/审计盖章),数据原样落库。
4. sqlite 目标为文件路径,首次执行自动创建该文件。
5. mssql/oracle 目标端按方言定稿实现,建议先小表试迁验证再全量。
6. 密码含特殊字符时用引号包裹,如 -src-password='P@ss w0rd!'。
7. 生产迁移建议先用 -tables 迁 1~2 张小表验证,再全量执行。