用了两年 DataMover 原生版,最近发现它出了 Docker 部署方案,实测记录整个过程——环境准备、安装步骤、踩坑总结和同步场景验证。

背景

做数据库迁移的人大概都遇到过这个场景——新项目要上线,数据得从 A 库搬到 B 库。源库是 MySQL,目标库是 ClickHouse。或者更麻烦的:公司在做国产化替代,Oracle 的数据要迁移到达梦。

以前我遇到这种需求,第一反应就是:又得折腾了。

自己写脚本用 JDBC 硬拉?数据量一大就 OOM,跑一半挂了还得重来。用 DataX 配 JSON?功能强但配置写起来繁琐,也没 Web 界面。上 Flink CDC?代码量不小,部署环境也重。无论选哪个,光配置环境就得花半天——装 JDK、配环境变量、调内存参数。

DataMover 我关注了挺久,之前一直在用原生部署版。解压、配参数、启动 Manager 和 Worker,流程熟悉了倒也不慢,但每换一台机器就得从头来一遍。上个月发现它出了 Docker 版,赶紧试了一下。

DataMover 能做什么

先快速说清楚这个工具是干什么的。一个 Web 界面操作的数据迁移同步平台,支持 35+ 种数据源,不写代码,配好就能跑。

支持的数据库类型(完整列表见官网):

类别 数据库
传统关系型 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/PostgreSQL/SQL Server/达梦/GaussDB)。

在这里插入图片描述

性能方面,我之前用原生版跑过 MySQL → MySQL 全量测试,25 个字段、500 万行、2GB 数据,2 分钟跑完,每秒 4.17 万行。

有个设计细节值得提:如果目标表不存在,它会自动建表,DDL 转换也是内置的——SQL Server 的 nvarchar 到 MySQL 的 varchar,不用手动调。而且默认不向已存在的目标表写入,而是输出到加后缀的临时表,防止误覆盖。

为什么从原生换到 Docker

原生部署不是不能用,但每次部署都像开盲盒——JDK 版本对得上吗?环境变量配好了吗?一台机器配通,换台又得重来。

Docker 版把这些全打包了。一行命令拉下来,容器跑起来就完事。CentOS 也好 Ubuntu 也罢,开发机还是生产机器,环境一模一样。

在这里插入图片描述

环境要求就两个:Docker Engine 20.10+ 和 Docker Compose 2.x。不用装 JDK,不用配 JAVA_HOME。镜像从阿里云 ACR 拉取,国内服务器不用额外配加速器。

一键安装

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 初始化上。

如果想先审查内容,也可以手动下载解压再部署:

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。

操作流程:

  1. 数据源管理 → 新增源库,填连接信息,测试连接,保存
  2. 同样方式加目标库
  3. 任务管理 → 新建任务,选源和目标数据源,选要同步的表
  4. 选同步模式(全量/增量/CDC),保存后启动

在"执行监控"里看实时读取行数、写入行数和耗时。500 万行两分钟跑完,性能和原生版一样。

踩坑记录

1. 端口冲突:服务器已有的 MySQL 占了 3306,部署脚本自动检测并映射到其他端口,没报错。

2. 内网镜像拉取:生产环境不能访问公网的话,需先在有公网的机器拉取再搬运:

./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,重启 Worker 即可。

4. 目标表没数据:任务显示成功但目标表没数据——因为 DataMover 默认不向已有表写入,输出到加后缀的新表。这是防误覆盖的设计,确认数据后在配置里勾选已有表就行。

踩坑记录不用怕

上面的问题都是实际测试中遇到的,都有解决办法。整体来说 Docker 版部署体验比原生版好很多,不用再操心 JDK 和环境配置了。

对于正在做数据迁移同步方案选型的同学,这个工具社区版免费,3 个任务 + 1 个节点够起步。包含 MySQL、Oracle、SQL Server、达梦、ClickHouse 等 17 种数据源,日常场景基本覆盖了。

安装包和更新信息都发布在官网下载页面官方文档有更详细的配置说明。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐