简介

MySQL2PG 是一款用 Go 语言 开发的数据库转换工具,可将 MySQL 5.7+ 数据库无缝迁移到 PostgreSQL 10+

核心功能

  • 表结构、数据、视图、索引、函数、用户及权限的全链路转换

  • 支持多种参数配置

  • 高性能、高可靠、高移植性


核心优势对比

特性

MySQL2PG

其他工具

开发语言

Go 语言原生

Java、Python 等

部署方式

单文件,无依赖

部署复杂,需第三方库

跨平台性

Windows/Linux 双平台

仅支持单平台

执行效率

Go 原生开发,效率高

效率较低

参数配置

简洁的 config.yml

JSON 等格式,配置复杂

开源协议

Apache 2.0 完全开源

收费或功能受限


转换流程

┌─────────────────────────────────────────────────────────┐
│                    MySQL2PG 转换流程                     │
└─────────────────────────────────────────────────────────┘
                            │
    ┌───────────────────────┼───────────────────────┐
    ▼                       ▼                       ▼
[Step 0]              [Step 1]              [Step 2 ~ 8]
测试模式              读取表定义              执行转换
    │                       │                       │
    ├─ 测试连接              ├─ 表过滤               ├─ 表结构
    ├─ 显示版本              │   ├─ 排除指定表        ├─ 视图
    └─ 退出                 │   └─ 仅同步指定表      ├─ 数据同步
                            │                       ├─ 索引
                            │                       ├─ 函数
                            │                       ├─ 用户
                            │                       ├─ 表权限
                            │                       │
                            ▼                       ▼
                                              [Final Step]
                                               数据校验
                                                  │
                                                  ├─ 行数对比
                                                  ├─ 启用约束/索引
                                                  ├─ 生成统计报告
                                                  └─ 输出不一致清单

详细步骤说明

步骤

配置项

功能说明

Step 0

test_only

测试 MySQL & PostgreSQL 连接,显示版本后退出

Step 1

exclude_use_table_list / use_table_list

表过滤:排除指定表 或 仅同步指定表

Step 2

tableddl: true

转换表结构:字段类型智能映射(如 tinyint(1)BOOLEAN),支持大小写控制

Step 3

views: true

转换视图:MySQL 视图定义转 PostgreSQL 兼容语法

Step 4

data: true

同步数据:分批读取、批量插入、并发控制,自动禁用外键约束和索引提升性能

Step 5

indexes: true

转换索引:主键、唯一索引、普通索引、全文索引自动重建

Step 6

functions: true

转换函数:支持 50+ 函数映射(如 NOW()CURRENT_TIMESTAMP

Step 7

users: true

转换用户:MySQL 用户 → PostgreSQL 角色(保留密码哈希)

Step 8

table_privileges: true

转换权限GRANT SELECT ON tableGRANT USAGE, SELECT ON table

Final

validate_data: true

数据校验:行数对比、启用约束、生成报告


快速开始

方式一:直接下载二进制(推荐)

GitHub 已预编译好 Windows/Linux 平台的二进制文件,直接下载即可使用:

📥 下载地址https://github.com/xfg0218/MySQL2PG/releases/tag/v2.0.0


方式二:源码编译

环境要求:Go 1.24+

# 1. 克隆仓库
git clone https://github.com/xfg0218/mysql2pg.git 
cd mysql2pg

# 2. 构建项目
make build

# 3. 创建配置文件
cp config.example.yml config.yml

配置文件详解

编辑 config.yml 中的 conversion 部分:

conversion:
  options:
    # ========== 转换开关 ==========
    tableddl: true           # Step 1: 转换表 DDL
    data: true               # Step 2: 转换数据(先 DDL 后数据)
    view: true               # Step 3: 转换视图
    indexes: true            # Step 4: 转换索引
    functions: true          # Step 5: 转换函数
    users: true              # Step 6: 转换用户
    table_privileges: true   # Step 7: 转换表权限
    
    # ========== 表名/字段名处理 ==========
    lowercase_columns: true       # 字段名转小写(默认 true)
    lowercase_tables: true        # 表名转小写
    
    # ========== 表存在时的处理 ==========
    skip_existing_tables: true    # 表已存在则跳过,否则创建
    
    # ========== 指定同步范围 ==========
    use_table_list: false         # 是否仅同步指定表(仅 data 步骤生效)
    table_list: [table1, table2]  # 指定同步的表列表
    
    exclude_use_table_list: false      # 是否启用排除表列表
    exclude_table_list: [table1]       # 要排除的表列表
    
    # ========== 数据同步选项 ==========
    validate_data: true           # 同步后验证数据一致性
    truncate_before_sync: true    # 同步前清空目标表数据
    
    # ========== 性能参数 ==========
    max_rows_per_batch: 10000     # 每批读取行数
    batch_insert_size: 1000       # 批量插入大小
    concurrency: 4                # 并发线程数
    max_indexes_per_batch: 20     # 每批处理索引数

问题反馈

欢迎使用!如有问题,请通过以下方式反馈:

GitHub Issueshttps://github.com/xfg0218/MySQL2PG/issues