1. 工具总览
本文汇总了 2025-2026 年主流的 MySQL 到 PostgreSQL 迁移工具,分为两大阵营:云厂商商业工具(阿里云/腾讯云/华为云)和开源工具(pgloader / MySQL2PG 等)。
阿里云 DTS
企业级数据传输服务,支持结构迁移 + 全量 + 增量三阶段不停机迁移。
腾讯云 DTS
支持无锁迁移、跨账号跨云迁移,对标 TDSQL PostgreSQL 版深度优化。
华为云 DRS
分钟级搭建迁移任务,预检查机制降低风险,政企客户首选。
pgloader
最流行的开源迁移工具,COPY 协议高效传输,自动类型映射,⭐ 4.3k+。
MySQL2PG
专业级 MySQL→PG 工具,v3.4.0 支持完整评估报告、兼容性校验、并发同步。
rds_dbsync
阿里内部使用的 MySQL→Greenplum/PostgreSQL 同步工具,不落地的实时迁移。
2. 云厂商商业工具对比
| 维度 | 阿里云 DTS | 腾讯云 DTS | 华为云 DRS |
|---|---|---|---|
| 迁移模式 | 结构+全量+增量 | 全量+增量 | 结构+全量+增量 |
| 不停机迁移 | ✅ 支持 | ✅ 无锁迁移 | ✅ 零停机 |
| 源库影响 | 低影响 | 无锁,最低影响 | 低影响 |
| 预检查 | ✅ | ✅ | ✅ 详细预检查表 |
| 数据校验 | ✅ 一致性校验 | ✅ | ✅ |
| 跨云迁移 | ✅ 支持 | ✅ 支持 | 有限支持 |
| 可视化控制台 | ✅ | ✅ | ✅ |
| 异构数据库 | ✅ 20+ 种 | ✅ 多种 | ✅ 多种 |
| 计费模式 | 按量付费 / 包年包月 | 按量付费 | 按量付费 |
| 文档地址 | help.aliyun.com/zh/dts | cloud.tencent.com/dts | huaweicloud.com/drs |
3. 阿里云 DTS 详解
阿里云 DTS(Data Transmission Service)是最成熟的企业级迁移方案之一,支持 RDS MySQL → RDS PostgreSQL 一键迁移,也支持自建库之间的迁移。
迁移管线
快速开始
- 登录阿里云控制台 → DTS → 创建迁移任务
- 填写源库(MySQL)和目标库(PostgreSQL)连接信息
- 选择迁移类型:结构迁移 + 全量 + 增量(推荐三者全选实现不停机)
- 通过预检查后启动任务,观察同步延迟归零后割接
优势
- 全托管服务,零运维成本
- 不停机迁移,业务无感知
- 自动处理类型映射和约束转换
- 支持跨云/混合云场景
- 可视化控制台 + 告警监控
局限性
- 需要阿里云账号,按量付费有成本
- 源库/目标库需对 DTS 服务器开放网络
- 部分 MySQL 特性(如存储过程)可能需手动调整
4. 腾讯云 DTS 详解
腾讯云 DTS 的核心特色是无锁迁移——不需要在源 MySQL 上获取全局锁,最大程度降低对业务的影响。
核心特色
- 无锁迁移:基于 binlog 位置点的增量同步,无需 LOCK TABLES
- 跨账号迁移:支持不同腾讯云账号之间的数据库迁移
- 跨云迁移:支持从其他云厂商或自建库迁移到腾讯 PostgreSQL
- 数据一致性校验:迁移完成后自动比对源库和目标库的数据一致性
优势
- 无锁迁移,对源库影响最小
- 跨账号/跨云能力强
- 对标 TDSQL PG 版深度优化
- 全托管,可视化操作
局限性
- 付费服务,按量计费
- 深度绑定腾讯云生态
- 自建 PostgreSQL 场景支持有限
5. 华为云 DRS 详解
华为云 DRS(Data Replication Service)主打分钟级搭建和预检查,适合政企客户和对合规性要求较高的场景。
核心特色
- 分钟级搭建:迁移任务配置和启动只需数分钟
- 详细预检查:提供预检查项一览表,逐项检查兼容性风险
- 在线迁移:零停机窗口,业务持续运行
- 支持 FlexusRDS for PostgreSQL:华为新一代云原生数据库
优势
- 预检查机制完善,降低迁移风险
- 搭建速度快,操作简单
- 政企客户适配,合规性强
局限性
- 跨云支持不如阿里云/腾讯云灵活
- 生态相对较小
- 付费服务
6. 开源工具对比
| 维度 | pgloader | MySQL2PG | rds_dbsync | gomysql2pg |
|---|---|---|---|---|
| GitHub ⭐ | 4.3k+ | 活跃维护 | 阿里开源 | 200+ |
| 语言 | Common Lisp | Java | Go | Go |
| 许可证 | PostgreSQL License | 开源 | Apache 2.0 | MIT |
| 安装方式 | Docker / apt / brew / 源码 | 下载 JAR / 源码编译 | 源码编译 Go | Go 直接编译 |
| 结构迁移 | ✅ 自动转换 DDL | ✅ 评估+转换 | 主要数据迁移 | 主要数据迁移 |
| 全量迁移 | ✅ COPY 协议 | ✅ 并发同步 | ✅ | ✅ |
| 增量迁移 | ❌ 仅一次性 | ✅ 增量同步 | ✅ 实时同步 | ❌ |
| 数据校验 | 基础 | ✅ 双重校验 | ✅ | ✅ 对比 |
| 评估报告 | ❌ | ✅ 可视化兼容性报告 | ❌ | ❌ |
| GUI / 可视化 | ❌ CLI only | ✅ 自带 Web UI | ❌ CLI only | ❌ CLI only |
| 配置方式 | .load 配置文件 | 配置文件 + UI 引导 | JSON/YAML 配置 | JSON 配置 |
7. pgloader 详解
pgloader 是最广泛推荐的开源 MySQL→PostgreSQL 迁移工具,由 Dimitri Fontaine 开发维护。核心优势是使用 PostgreSQL 的 COPY 协议高效传输数据。
安装(3 种方式)
快速开始(Docker 方式)
- 创建配置文件
mysql.load,定义源库和目标库连接串 - 运行
docker run --rm dimitri/pgloader pgloader mysql.load - pgloader 自动完成表结构转换 + 数据迁移 + 索引创建
配置文件示例
LOAD DATABASE FROM mysql://user:pass@localhost/mydb INTO pgsql://user:pass@localhost/mydb WITH include drop, create tables, create indexes, reset sequences SET PostgreSQL PARAMETERS maintenance_work_mem to '128MB', work_mem to '12MB' ;
适用场景
优势
- 安装极简,Docker 一行命令即可
- COPY 协议传输效率高
- 自动类型映射(TINYINT→SMALLINT 等)
- 社区成熟,文档丰富
- 支持 SQLite/MSSQL/CSV → PG 等多种源
局限性
- 仅支持一次性全量迁移,不支持增量同步
- 大型数据库迁移耗时较长
- 存储过程/触发器需手动转换
- Common Lisp 编译依赖,自行编译较复杂
8. MySQL2PG 详解
MySQL2PG(xfg0218/mysql2pg)是专业级的 MySQL→PostgreSQL 迁移工具,最新版本 v3.4.0 已发布,是开源方案中功能最全面的。
核心能力
- 评估模式:迁移前扫描源库,生成兼容性评估报告,标注不兼容的语法和功能
- 全量 + 增量:支持一次性全量迁移和基于 binlog 的持续增量同步
- 并发同步:多线程并行迁移,大幅提升迁移速度
- 双重数据校验:迁移完成后自动校验源库和目标库的数据一致性
- 可视化 Web UI:自带管理界面,非 DBA 也能操作
- 视图/函数转换:42 个视图 + 113 个函数 100% 转换(实测数据)
迁移管线
适用场景
优势
- 唯一自带兼容性评估报告的开源工具
- 支持增量同步,可不停机迁移
- 自带 Web UI,操作门槛低
- 双重数据校验,迁移结果可信赖
- 视图和函数转换率高
局限性
- 社区规模不如 pgloader
- Java 依赖,需要 JRE 运行环境
- 文档以中文为主,国际化程度有限
9. 类型映射与兼容性注意事项
MySQL 和 PostgreSQL 在数据类型和 SQL 语法上存在差异,迁移时需要重点关注以下映射关系。
数据类型映射
| MySQL | PostgreSQL | 说明 |
|---|---|---|
TINYINT | SMALLINT | PG 无 1 字节整型 |
INT UNSIGNED | BIGINT | 无符号需升级类型 |
DATETIME | TIMESTAMP | 注意时区处理 |
TINYTEXT | TEXT | PG 统一使用 TEXT |
VARCHAR(N) | VARCHAR(N) | PG 中 TEXT 更常用 |
BLOB | BYTEA | 二进制数据 |
BOOLEAN / TINYINT(1) | BOOLEAN | PG 原生布尔类型 |
DOUBLE | DOUBLE PRECISION | 关键字差异 |
AUTO_INCREMENT | SERIAL / GENERATED ALWAYS AS IDENTITY | 自增机制不同 |
ENUM | CREATE TYPE ... AS ENUM | PG 需显式创建枚举类型 |
SQL 语法差异
| 特性 | MySQL | PostgreSQL |
|---|---|---|
| 标识符引号 | 反引号 `table` | 双引号 "table" |
| 字符串引号 | 单/双引号均可 | 仅单引号 |
| 分页 | LIMIT offset, count | LIMIT count OFFSET offset |
| GROUP BY | 宽松模式 | 严格模式(SELECT 列必须在 GROUP BY 中) |
| 连接字符串 | CONCAT() 忽略 NULL | || 操作符,NULL 传播 |
| 日期函数 | NOW(), CURDATE() | NOW(), CURRENT_DATE |
| 存储过程 | 语法差异大 | PL/pgSQL,需重写 |
10. 选型建议
场景一:阿里云用户
推荐阿里云 DTS — 全托管、不停机迁移、自动类型映射。如果源库和目标库都在阿里云上,这是最省心的选择。
场景二:腾讯云用户
推荐腾讯云 DTS — 无锁迁移对源库影响最小,适合业务不能中断的场景。
场景三:华为云 / 政企用户
推荐华为云 DRS — 预检查机制完善,分钟级搭建,合规性强。
场景四:自建数据库 / 跨云 / 一次性迁移
推荐 pgloader — 安装极简(Docker 一行命令),COPY 协议高效传输,社区最成熟。适合中小型数据库的一次性迁移。
场景五:自建数据库 / 需要不停机 + 评估报告
推荐 MySQL2PG — 唯一自带兼容性评估报告的开源工具,支持增量同步和 Web UI,适合不停机迁移场景。
场景六:阿里技术栈 + 实时同步
推荐 rds_dbsync — 阿里内部使用的 Go 语言同步工具,Apache 2.0 许可,适合 MySQL→Greenplum/PostgreSQL 的不落地实时迁移。
11. 迁移步骤参考
无论选择哪个工具,一个完整的 MySQL→PostgreSQL 迁移流程通常包含以下步骤:
各步骤要点
- 评估兼容:使用 MySQL2PG 评估模式或手动检查存储过程、触发器、特殊函数
- 备份源库:迁移前完整备份 MySQL,确保可回滚
- 结构迁移:转换 DDL,注意类型映射、索引、约束、自增序列
- 全量数据:使用工具的批量迁移能力,建议关闭 PG 的 autovacuum 提升速度
- 增量追平:基于 binlog 持续同步,观察延迟归零
- 数据校验:比对记录数、关键字段聚合值,确保数据一致性
- 应用适配:修改 ORM 配置、SQL 语法(反引号→双引号、LIMIT 语法等)
- 割接上线:停写 MySQL → 等待增量同步完成 → 切换应用连接 → 验证