用了两年的数据同步工具出了 Docker 版,一行命令完成部署。记录从原生到容器化的迁移过程、踩坑经验和多场景实测。
前言
做数据迁移同步最烦的不是数据量大,不是性能不够,是环境配置。
JDK 版本对不上、环境变量没配好、端口冲突——这些问题每次部署都要折腾一遍。尤其是多台机器的时候,每台都要重复同样的操作。
我一直在用 DataMover 这个数据迁移同步平台,Web 界面操作,支持全量迁移、增量同步、CDC 实时同步,覆盖 35+ 种数据源。之前都是原生部署,最近发现它出了 Docker 版,试了一下体验不错,写这篇记录一下。
工具能力速览
一个** Web 界面操作的数据迁移同步平台**,不用写代码,配好就能跑。
支持的数据库覆盖全面(完整列表见官网):
| 类别 | 数据库 |
|---|---|
| 传统关系型 | MySQL、PostgreSQL、Oracle、SQL Server、MariaDB、Db2、Sqlite、Sybase |
| 国产数据库 | 达梦(DM)、GaussDB、OceanBase、Kingbase、Gbase8a/8s、PolarDB |
| 数据仓库 | ClickHouse、Apache Doris、SelectDB、Hive、ODPS |
| NoSQL | MongoDB、Redis、Elasticsearch、HBase |
| 消息队列 | Kafka、RabbitMQ、RocketMQ、ActiveMQ |
| 文件存储 | FTP、SFTP、Samba、HDFS |
三种同步模式:全量迁移(一次性搬完)、增量同步(基于时间戳/自增字段周期拉取,分钟级)、CDC 实时同步(基于 binlog/WAL,秒级延迟,源端支持 MySQL/Oracle/PG/SQL Server/达梦/GaussDB)。
性能实测:MySQL → MySQL 全量,25 字段、500 万行、2GB,2 分钟跑完,每秒 4.17 万行。
有个设计细节值得提:目标表不存在时自动建表,DDL 转换也是内置的。而且默认不向已有表写入,输出到加后缀的临时表,防止误覆盖。
原生部署 vs Docker 部署
原生部署需要:装 JDK 8+、配 JAVA_HOME、解压安装包、分别启动 Manager 和 Worker 进程。每台机器都得来一遍。
Docker 部署只需要:Docker Engine 20.10+ + Docker Compose 2.x。不需要装 JDK。镜像从阿里云 ACR 拉取,国内服务器不用配加速器。
安装过程
环境:4 核 8G Linux,Docker 20.10+。
一键安装:
curl -fsSL https://down.datamover.cn/install.sh | bash
Windows 走 PowerShell:
Set-ExecutionPolicy Bypass -Scope Process -Force; irm https://down.datamover.cn/install.ps1 | iex
脚本自动完成:检测 Docker 环境 → 下载压缩包 → 拉取镜像 → 启动三个容器(MySQL + Manager + Worker)。
首次启动 3-5 分钟,主要花在镜像拉取和 MySQL 初始化(Flyway 自动建表)上。之后重启十几秒完事。
习惯审查内容的也可以手动下载:
wget https://down.datamover.cn/datamover-docker.zip
unzip datamover-docker.zip
cd datamover-docker
目录结构:docker-compose.yml、deploy.sh、deploy.ps1、.env。.env 里可以改默认密码 Dm@2024#Secure!。
chmod +x deploy.sh
./deploy.sh
部署脚本自动检测 3306/8000/8011 端口占用,被占的话自动换到可用端口,启动完打印实际地址。
跑个同步任务
浏览器访问 http://IP:8000,看到登录界面说明部署成功。
默认账号 admin/admin123。
操作流程:
- 数据源管理 → 新增源库连接,填连接信息,测试通过后保存
- 同样方式加目标库
- 任务管理 → 新建任务,选源和目标数据源,选要同步的表
- 选同步模式(全量/增量/CDC),保存后启动
任务跑起来后在"执行监控"看实时行数和耗时。500 万行两分钟跑完,性能和原生版一样。
踩坑记录
1. 端口冲突
服务器已有 MySQL 占用 3306,部署脚本自动检测并映射到其他端口,没报错。
2. 内网镜像拉取
镜像在阿里云 ACR,内网机器需先在有公网的机器上拉取:
./deploy.sh --pull
docker save -o datamover-images.tar datamover-manager datamover-worker
# 传到内网
docker load -i datamover-images.tar
3. Worker 不上线
多网卡机器 DM_LOCAL_IP 自动获取可能不对,在 .env 里手动指定本机 IP 后重启即可。
4. 目标表安全机制
任务显示成功但目标表没数据?因为 DataMover 默认不往已有表写入,输出到加后缀的新表。这是防误覆盖的设计。确认数据后在任务配置里勾选已有表即可。
结语
从原生部署到 Docker,最大的变化是不用再操心 JDK 和环境配置了。一次配置到处跑,没有环境差异的破事。
社区版免费,3 个任务 + 1 个节点。免费版包含 17 种核心数据源(MySQL、Oracle、SQL Server、达梦、ClickHouse、Kafka 等),个人和中小企业够用。需要更多数据源或 CDC 可升级付费版。
安装包在官网下载页面可以获取,官方文档有详细的配置参数说明。
作者是一名后端开发,平时关注数据中间件和同步工具。