异构数据源一键同步:DataMover Docker 部署实测,从原生到容器化

0 阅读4分钟

用了两年的数据同步工具出了 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
NoSQLMongoDB、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 万行。

6-架构图.png

有个设计细节值得提:目标表不存在时自动建表,DDL 转换也是内置的。而且默认不向已有表写入,输出到加后缀的临时表,防止误覆盖。

原生部署 vs Docker 部署

原生部署需要:装 JDK 8+、配 JAVA_HOME、解压安装包、分别启动 Manager 和 Worker 进程。每台机器都得来一遍。

1-对比图.png

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)。

2-一键安装.png

首次启动 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,看到登录界面说明部署成功。

5-登录界面.png

默认账号 admin/admin123。

操作流程:

  1. 数据源管理 → 新增源库连接,填连接信息,测试通过后保存
  2. 同样方式加目标库
  3. 任务管理 → 新建任务,选源和目标数据源,选要同步的表
  4. 选同步模式(全量/增量/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 可升级付费版。

安装包在官网下载页面可以获取,官方文档有详细的配置参数说明。

作者是一名后端开发,平时关注数据中间件和同步工具。