本文为您介绍如何使用阿里云数据传输服务(DTS)将MongoDB数据库平滑迁移至PolarDB MySQL版集群的文档数据库兼容能力,并提供可选的反向同步方案以保障业务回滚。
迁移方案概述
迁移架构
本次迁移主要使用数据传输服务(DTS)实现从源MongoDB实例到目标PolarDB集群的数据同步。
正向同步(MongoDB至PolarDB):通过DTS实现。DTS首先进行全量迁移,即复制源库的全量数据。随后进入增量迁移阶段,通过捕获并应用源MongoDB实例的Oplog或Change Stream,实时同步数据变更,确保目标PolarDB与源库的数据保持最终一致。
反向同步(可选,PolarDB至MongoDB):为保障业务割接失败后能快速回滚,您可以选择性地配置一条从PolarDB到源MongoDB实例的反向数据同步链路。该链路基于PolarDB的Binlog和阿里云实时计算Flink版实现。
迁移影响
性能:数据迁移(尤其是全量迁移阶段)会对源数据库和目标数据库产生一定的读写负载。建议在业务低峰期执行迁移。
成本:DTS数据迁移任务与用于反向同步的实时计算Flink实例均会产生相应费用。迁移完成后,请及时释放不再需要的资源以节省成本。
准备工作
在开始迁移前,请逐项检查并完成以下准备工作,确保所有条件均已满足。
类别 | 检查项 | 操作指引与说明 |
版本与功能 | 目标PolarDB集群 |
|
源MongoDB实例 | 增量迁移依赖于源MongoDB数据库的Oplog或Change Stream。请确保源库为副本集或分片集群,且Oplog空间充足,能够覆盖整个全量迁移时长。 | |
网络规划 | 网络环境 | 源MongoDB实例、目标PolarDB集群以及后续创建的Flink实例需位于同一专有网络(VPC)内。 |
账号与权限 | 源MongoDB实例 | 准备一个用于DTS迁移的数据库账号,该账号需具备读取所有待迁移数据。 |
目标PolarDB集群 | 创建文档数据库专用账号。同时,在业务割接前,建议对目标PolarDB集群的写入权限进行管控,仅允许数据传输服务(DTS)中使用的账号写入,防止数据污染。 |
迁移步骤
步骤一:创建并配置DTS迁移任务
配置从源MongoDB到目标PolarDB MySQL版的数据迁移链路,本文以云数据库MongoDB版副本集实例为例。
登录数据传输服务DTS控制台。在左侧导航栏中,单击数据迁移,并在页面左上角选择实例所属地域。
单击创建任务,进入任务配置页面。
配置源库及目标库。
类别
配置
说明
无
任务名称
DTS会自动生成一个任务名称,建议配置具有业务意义的名称(无唯一性要求),便于后续识别。
源库信息
数据库类型
根据源库的部署位置进行选择。本示例以为例介绍配置流程。
说明若源或目标库为其他云平台的数据库,您还需要进行其他的准备工作概览。
接入方式
选择云实例。
说明您可按实际业务需求调整。
实例地区
选择MongoDB实例所在地区。
说明若源或目标库为其他云平台的数据库,您可以选择就近地区。
是否跨阿里云账号
您可按实际业务需求调整。本示例以不跨账号(同账号)为示例。
说明架构类型
您可按实际业务需求调整。本示例以副本集架构为示例。
迁移方式
选择Oplog
实例ID
选择账号下面的MongoDB实例。
鉴权数据库名称
填写鉴权数据库名称。
数据库账号
填写MongoDB实例的账号。
数据库密码
填写MongoDB实例的密码。
连接方式
请根据MongoDB实例的实际情况,选择非加密连接或SSL安全连接。
目标库信息
数据库类型
固定为。
接入方式
选择专线/VPN网关/智能网关。
实例地区
选择PolarDB集群所在地区。
已和目标端数据库联通的VPC
选择PolarDB集群的专有网络VPC。
架构类型
固定为副本集架构,暂不支持分片集群架构。
连接地址类型
固定为单节点。
域名或IP地址
填写文档数据库私有地址。
端口
填写文档数据库私有地址对应的端口,默认为3306。
鉴权数据库名称
填写
admin。数据库账号
填写文档数据库专用账号,固定为
doc_root。数据库密码
填写文档数据库专用账号对应的密码。
连接方式
选择非加密连接。
VPC数据通道主备交换机
选择DTS使用的VPC数据通道访问您的数据源:
交换机(主):选择PolarDB集群所属的交换机。
交换机(备):您可按实际业务需求进行选择。
单击测试连接以进行下一步。请将DTS服务器访问授权弹窗中的目标端IP地址添加到PolarDB集群的白名单中。点击确认授权并测试链接若无异常则自动跳转第二步配置任务对象。
警告DTS自动添加或您手动添加DTS服务的公网IP地址段可能会存在安全风险,一旦使用本产品代表您已理解和确认其中可能存在的安全风险,并且需要您做好基本的安全防护,包括但不限于加强账号密码强度防范、限制各网段开放的端口号、内部各API使用鉴权方式通信、定期检查并限制不需要的网段,或者使用通过内网(专线/VPN网关/智能网关)的方式接入。
配置任务对象。
对象配置
配置
说明
迁移类型
勾选库表结构迁移、全量迁移与增量迁移。
说明增量迁移不支持在任务开始运行后新建的数据库。详细信息,请参见迁移类型说明。
目标已存在表的处理模式
预检查并报错拦截:检查目标端是否为空。如果待迁移的目标端为空,则通过该检查项目;如果不为空,则在预检查阶段提示错误,数据迁移作业不会被启动。
忽略报错并继续执行:跳过目标库对象数据存在性检查的检查项。
警告选择为忽略报错并继续执行后,如果在迁移过程中遇到目标端的Key与源端中的Key相同,会将源端的数据覆盖写入目标端中,从而可能会导致目标端原有的数据丢失,请谨慎选择。
迁移对象
在源库对象框中单击待迁移的对象,然后单击
将其移动到已选择对象框。
单击下一步高级配置,按照实际情况选择即可。
单击下一步数据校验,按照实际情况选择即可。
说明若您需要进行数据校验,全量校验中可选择按表行数进行校验。
预检查:单击页面右下角的下一步保存任务并预检查,等待检查完成。在迁移任务正式启动之前,会先进行预检查。只有预检查通过后,才能成功启动迁移任务。
说明如果预检查失败,单击具体检查项后的
,查看失败详情。您可以根据提示修复后重新进行预检查。
如无需修复告警检测项,您也可以选择确认屏蔽,跳过告警检测项重新进行预检查。
购买DTS实例:
在购买页面,选择链路规格并选中《数据传输(按量付费)服务条款》。
单击购买并启动,迁移任务正式开始。
步骤二:监控迁移任务并验证数据
任务启动后,您可以在DTS控制台观察迁移任务的状态。任务会依次经历结构迁移、全量数据迁移和增量数据迁移。
监控迁移进度:
全量迁移:观察数据量的迁移进度。
增量迁移:重点关注增量写入的延迟指标。当全量迁移完成,且增量写入延迟稳定在数秒内时,表示目标PolarDB集群的数据已基本追平源库。
查看迁移性能:
在性能监控页面,可以查看全量迁移性能与增量迁移性能。
步骤三:(可选)配置反向同步
为确保业务割接万无一失,您可以在割接前配置一条从PolarDB到源 MongoDB实例的反向同步链路。当业务切换到PolarDB后,此链路会将PolarDB中的数据变更实时同步回源MongoDB实例,为可能的回滚操作提供数据基础。配置流程如下:
环境准备
确保PolarDB集群已开启Binlog。
(可选)创建高权限数据库账号:如果您尚未创建高权限账号,请前往PolarDB控制台,在集群的中创建高权限账号。
开通并配置Flink:开通实时计算Flink版,并创建一个Flink工作空间。
重要Flink工作空间需与PolarDB集群位于同一个VPC下。
配置PolarDB集群的IP白名单:
在Flink控制台,单击工作空间的详情按钮,在工作空间详情页面获取其网段信息。
前往PolarDB控制台,在集群的中新增IP白名单分组,将Flink的网段信息添加进去。
前往MongoDB控制台,在集群的中,将Flink的网段信息添加进去。
验证PolarDB集群与Flink工作空间连通性:
在Flink控制台,进入工作空间,单击右上角的网络探测图标。
填写PolarDB集群主节点的私有地址与端口,单击探测。
弹窗提示网络探测成功连通,即集群白名单配置正确。
部署Flink作业
下载反向同步工具:PolarDBBackSync.jar。
准备配置文件:创建名为
application.yaml的配置文件,内容如下:source: # PolarDB主节点的私网地址 hostname: pc-xxx.mysql.polardb.rds.aliyuncs.com # PolarDB主节点的私网端口 port: 3306 # (可选) # whiteTableSet: 需要反向回流的表 blackTableSet: 不需要反向回流的表 # 两者只能声明一个,或者不声明,表示回流所有表 filter: whiteTableSet: blackTableSet: # checkpoint间隔,单位毫秒, 3s checkpoint: interval: 3000上传文件:进入Flink控制台,找到并进入目标工作空间,在文件管理页面上传
PolarDBBackSync.jar和application.yaml。安全存储凭证:为避免明文暴露密钥,建议使用Flink的变量管理功能存储敏感信息。在变量管理页面新增以下四个变量:
变量名称
变量值
polardbusernamePolarDB的高权限数据库账号。
polardbpasswordPolarDB的高权限数据库账号对应的密码。
mongodbendpointMongoDB的连接地址。推荐使用ConnectionStringURI(高可用连接地址)。
部署并启动作业:
进入作业运维页面,选择。
填写以下主要参数,其他参数可根据业务环境进行配置。然后单击部署。
参数名称
填写参考
部署模式
固定为流模式。
部署名称
填写作业部署名称,此处以PolarDBBackSync为例。
引擎版本
固定为vvr-11.3-jdk11-flink-1.20。
JAR URI
选择已上传的
PolarDBBackSync.jar。Entry Point Class
固定为
org.example.PolarDBToMongoDBCdcJob。Entry Point Main Arguments
固定为:
--polardbusername ${secret_values.polardbusername}--polardbpassword ${secret_values.polardbpassword}--mongodbendpoint ${secret_values.mongodbendpoint}附加依赖文件
选择已上传的
application.yaml部署成功后,单击,等待作业状态为运行中即可。
步骤四:执行业务割接
当DTS增量同步延迟稳定在低位时,即可开始业务割接。建议在业务低峰期进行。
最终校验:执行关键业务数据的抽样比对,或对核心表的行数进行最后一次核对。
停止源端写入:暂停所有向源MongoDB实例写入数据的业务应用或服务。
停止DTS任务:在DTS控制台暂停任务并非结束任务或释放任务。
切换应用连接:将业务应用的数据库连接配置从源MongoDB实例地址修改为PolarDB的文档数据库地址。
(可选)开启反向同步任务:在业务正式切换至PolarDB期间开启反向同步任务,基于实时计算Flink版实现数据的反向回流,为业务回滚提供保障。
启动业务:重启业务应用,并进行核心功能验证,确保业务在PolarDB上运行正常。
(可选)停止反向同步任务:在割接完成且业务稳定运行一段时间后,确认数据一致性满足业务需求后,即可安全停止反向同步任务(停止Flink作业与释放相关资源)。
观察阶段:
密切监控业务日志和数据库性能指标,确认无异常。
稳定运行一段时间后,若一切正常,则表明割接成功。
步骤五:清理资源
迁移和割接成功后,为节省成本,请及时清理不再需要的资源。
数据传输服务(DTS):在DTS控制台上释放任务。
实时计算Flink版:
停止作业:前往Flink控制台,在目标工作空间中,进入作业运维页面,找到目标作业并单击停止。
释放实例:返回Flink控制台,找到目标工作空间,单击释放资源。
PolarDB集群:根据业务需求,可以选择缩短Binlog文件保存时长或关闭Binlog。
说明由于关闭Binlog功能需重启集群,建议在业务低峰期执行操作并确保应用程序具备重连机制。