【运维】使用 DataX 实现 MySQL 到 PostgreSQL 的数据同步
🚀 使用 DataX 实现 MySQL 到 PostgreSQL 的数据同步
在日常的数据开发工作中,数据同步是一项极其常见的任务。而 DataX 作为阿里开源的一款通用数据同步工具,支持多种数据源之间的互通,使用简单,扩展性强,非常适合进行结构化数据的迁移和同步。
本文将详细介绍如何通过 DataX 从 MySQL 同步数据到 PostgreSQL,并提供一份完整的配置模板与使用技巧。
✨ 场景介绍
假设我们需要将 MySQL 中某张表的数据同步到 PostgreSQL 的目标表中,常见于数据迁移、数据备份或数据同步分析场景。以下是我们要解决的具体问题:
- 源库:MySQL
- 目标库:PostgreSQL
- 工具选择:DataX
🛠 准备工作
1️⃣ 安装 DataX
DataX 无需编译,直接下载即可使用:
👉 下载地址:
wget https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz
解压后进入目录:
tar -zxvf datax.tar.gz
cd datax
执行测试(可选):
python3 bin/datax.py job/job.json
2️⃣ 数据库准备
确保你已经创建好如下数据库连接:
-  MySQL 源库: - IP: ip
- 数据库: db_name
- 用户名/密码: root / 123456
 
- IP: 
-  PostgreSQL 目标库: - IP: ip
- 数据库: db_name
- 用户名/密码: root / 123456
 
- IP: 
📄 DataX 配置文件详解
以下是完整的单表同步, DataX 作业 JSON 配置文件示例:
{"job": {"setting": {"speed": {"channel": 3}},"content": [{"reader": {"name": "mysqlreader","parameter": {"username": "root","password": "123456","connection": [{"querySql": ["SELECT * FROM table_name"],"jdbcUrl": ["jdbc:mysql://ip:3306/db_name?useSSL=false"]}]}},"writer": {"name": "postgresqlwriter","parameter": {"username": "root","password": "123456","column": ["*"],"connection": [{"jdbcUrl": "jdbc:postgresql://ip:5432/db_name","table": ["table_name"]}]}}}]}
}
参数说明:
- speed.channel: 控制并发通道数量,设置为 3 提升同步性能。
- reader: 使用- mysqlreader读取数据,支持指定- querySql。
- writer: 使用- postgresqlwriter写入数据,- column: ["*"]表示全字段复制。
🧪 运行同步任务
- 将上述配置保存为 job_mysql2pg.json。
- 执行同步命令:
python3 bin/datax.py job_mysql2pg.json
你将看到控制台日志输出数据同步过程,每条记录的读取写入状态、任务用时等。
🧩 常见问题排查
| 问题 | 解决方案 | 
|---|---|
| No suitable driver found | 确保将 MySQL 和 PostgreSQL 的 JDBC 驱动包放入对应的 plugin/reader/mysqlreader/libs和plugin/writer/postgresqlwriter/libs | 
| column配置不匹配 | 若指定了 column字段,需确保字段名与目标表一致;推荐使用["*"]全字段同步 | 
| 目标表不存在 | 需提前创建 PostgreSQL 的目标表,DataX 不会自动建表 | 
| 中文乱码 | 设置连接字符集,如 jdbc:mysql://ip:3306/db_name?characterEncoding=utf8&useSSL=false | 
🧠 实战建议
- 小批量测试:正式运行前用少量数据验证结构和字段匹配。
- 定时任务:结合 Linux crontab可定期执行同步任务。
- 增量同步:结合 WHERE子句实现按时间字段增量导入。
示例增量 SQL:
SELECT * FROM table_name WHERE updated_at >= '2024-01-01'
📌 总结
DataX 是进行异构数据库之间数据同步的得力工具。通过配置简单的 JSON 文件,我们就可以实现从 MySQL 到 PostgreSQL 的高效数据迁移。
本例中我们使用了查询语句方式实现全表同步,但在实际场景中,也可以配合增量字段、定时调度等手段进行更复杂的数据同步任务。
