本文介绍使用 DTS 数据迁移功能从 MongoDB 迁移数据至腾讯云数据库 MongoDB 的操作指导。
MongoDB 支持副本集、分片集群之间的异构迁移,即源端、目标端架构为副本集 - 副本集、副本集 - 分片集群、分片集群 - 副本集、分片集群 - 分片集群的4种场景。
注意事项
DTS 在执行全量数据迁移时,会占用一定源端实例资源,可能会导致源实例负载上升,增加数据库自身压力。如果您的数据库配置过低,建议您在业务低峰期进行迁移。
外网实例迁移时,请确保源实例服务在外网环境下可访问。
前提条件
源数据库和目标数据库符合迁移功能和版本要求,请参见 数据迁移支持的数据库 进行核对。
已完成 准备工作。
需要在源实例创建一个只读账号供迁移使用,否则迁移前校验步骤将不通过。
use admindb.createUser({user: "username",pwd: "password",roles:[{role: "readAnyDatabase", db: "admin"},{role: "read", db: "local"}]})
约束限制
由于单节点无 Oplog,所以自建实例是单节点时,不支持增量迁移。
操作限制
迁移过程中请勿进行如下操作,否则会导致迁移任务失败。
请勿修改、删除源数据库和目标数据库中用户信息(包括用户名、密码和权限)和端口号。
请勿在源库上执行清除 oplog 的操作。
在数据迁移阶段,请勿删除目的端数据库 TencetDTSData。
在数据迁移阶段,请谨慎操作目的端数据,避免最终数据不一致。
分片迁移请勿在源端执行除事务外的 DDL 操作,DTS 会过滤分片集群的 DDL 操作,避免导致最终数据不一致。
如果仅执行全量数据迁移,请勿在迁移过程中向源实例中写入新的数据,否则会导致源和目标数据不一致。针对有数据写入的场景,为实时保持数据一致性,建议选择全量 + 增量数据迁移。
支持的 SQL 操作
支持副本集和分片集群的 DDL 操作。
操作类型 | 支持的 SQL 操作 |
DML | INSERT、UPDATE、DELETE |
DDL | INDEX:createIndexes、createIndex、dropIndex、dropIndexes COLLECTION:createCollection、drop、collMod、renameCollection、convertToCapped DATABASE:dropDatabase、copyDatabase |
环境要求
类型 | 环境要求 |
源数据库要求 | 源库所在的服务器需具备足够的出口带宽,否则将影响迁移速率。 源库提供的用户需要有读取数据库的权限。 源库不能有和 TencetDTSData 同名的库。 源库若是集群模式,需在增量同步之前关闭 balancer。 进行全量 + 增量迁移时,需要能够从源端获取到 Oplog。 |
目标数据库要求 | 目标库的空间大小须是源库待迁移库表空间的1.3倍以上。 目标库提供的用户需要 root 权限。 目标库不能有和 TencetDTSData 同名的库。 目标库不能有和源库同名的库表。 源库为分片时,需要正确填写对应 mongos、config server、mongod 节点信息。 目标库不能有负载业务进行,否则会报警告。 |
操作步骤
1. 登录 DTS 控制台,在左侧导航选择数据迁移页,单击新建迁移任务,进入新建迁移任务页面。
2. 在新建迁移任务页面,选择迁移的源实例类型和所属地域,目标实例类型和所属地域,规格等,然后单击立即购买。
配置项 | 说明 |
源实例类型 | 请根据您的源数据库类型选择,购买后不可修改。本场景选择“MongoDB”。 |
源实例地域 | 选择源数据库所属地域。如果源库为自建数据库,选择离自建数据库最近的一个地域即可。 |
目标实例类型 | 请根据您的目标数据库类型选择,购买后不可修改。本场景选择“MongoDB”。 |
目标实例地域 | 选择目标数据库所属地域。 |
规格 |
3. 在设置源和目标数据库页面,完成任务设置、源库设置和目标库设置。
注意:
请在源实例创建一个只读账号供迁移使用,否则迁移前校验步骤将不通过。
如果源数据库或者目标数据库为腾讯云数据库实例,针对该实例, DTS 在迁移过程中会使用系统服务账号进行迁移。
因源数据库部署形态和接入类型的交叉场景较多,各场景迁移步骤类似,如下仅提供典型场景的配置示例,其他场景请用户参考配置。
示例一:将本地自建 MongoDB(分片集群)通过专线接入方式迁移至腾讯云数据库。
设置类型 | 配置项 | 说明 |
任务设置 | 任务名称 | 设置一个具有业务意义的名称,便于任务识别。 |
| 运行模式 | 立即执行:完成任务校验通过后立即启动任务。 定时执行:需要配置一个任务执行时间,到时间后启动任务。 |
源库设置 | 源库类型 | 购买时选择的源库类型,不可修改。 |
| 所属地域 | 购买时选择的源库地域,不可修改。 |
| 接入类型 | 公网:源数据库可以通过公网 IP 访问。 云主机自建:源数据库部署在 腾讯云服务器 CVM 上。 专线接入:源数据库可以通过 专线接入 方式与腾讯云私有网络打通。 VPN 接入:源数据库可以通过 VPN 连接 方式与腾讯云私有网络打通。 云数据库:源数据库属于腾讯云数据库实例。 云联网:源数据库可以通过 云联网 与腾讯云私有网络打通。 私有网络 VPC:源数据库和目标数据库都部署在腾讯云上,且有 私有网络。 |
| 架构 | 选择源库的架构形态,本场景以“集群迁移”为例进行介绍。 选择一种架构类型,进行连通性测试后,不能再修改为其他架构类型,否则任务会报错。 |
| 私有网络专线网关 | 专线接入时只支持私有网络专线网关,请确认网关关联网络类型。 |
| 私有网络 | 选择私有网络专线网关的私有网络和子网。 |
| 节点 - mongod | 请输入 mongod 节点 IP 和端口,或者域名和端口。多个节点请换行输入;每个 shard 下仅填入一个 mongod 即可,示例:1xx.xx.55.77:6xx9 |
| 节点 - mongos | 请输入 mongos 节点 IP 和端口,或者域名和端口。 |
| 节点 - Config Server | 请输入 Config Server 节点的 IP 和端口,或者域名和端口。 |
| 是否需要认证 | 是否需要对源库中用户名和密码的安全性进行认证。 |
| 认证库 | 需要认证的库名,即执行迁移任务账号所属的数据库名称,例如 admin。 |
| 认证机制 | 当前支持 SCRAM-SHA-1。 |
| 账号及密码选择 | 源库三个节点 mongod、mongos、Config Server 的账号密码相同时选择“相同账号及密码”,否则选择“不同的账号及密码”,然后填写节点对应的账号和密码。 |
目标库设置 | 目标库类型 | 购买时选择的目标库类型,不可修改。 |
| 所属地域 | 购买时选择的目标库地域,不可修改。 |
| 接入类型 | 本场景选择“云数据库”。 |
| 数据库实例 | 选择目标库的实例 ID。 |
| 账号 | 目标库的数据库账号,账号权限需要满足要求。 |
| 密码 | 目标库的数据库账号的密码。 |
示例二:将腾讯云数据库迁移至腾讯云数据库。
设置类型 | 配置项 | 说明 |
任务设置 | 任务名称 | 设置一个具有业务意义的名称,便于任务识别。 |
| 运行模式 | 立即执行:完成任务校验通过后立即启动任务。 定时执行:需要配置一个任务执行时间,到时间后启动任务。 |
| 标签 | 标签用于从不同维度对资源分类管理。如现有标签不符合您的要求,请前往控制台管理标签。 |
源库设置 | 源库类型 | 购买时选择的源库类型,不可修改。 |
| 所属地域 | 购买时选择的源库地域,不可修改。 |
| 接入类型 | 公网:源数据库可以通过公网 IP 访问。 云主机自建:源数据库部署在 腾讯云服务器 CVM 上。 专线接入:源数据库可以通过 专线接入 方式与腾讯云私有网络打通。 VPN 接入:源数据库可以通过 VPN 连接 方式与腾讯云私有网络打通。 云数据库:源数据库属于腾讯云数据库实例。 云联网:源数据库可以通过 云联网 与腾讯云私有网络打通。 私有网络 VPC:源数据库和目标数据库都部署在腾讯云上,且有 私有网络。 |
| 是否跨账号 | 接入类型选择“云数据库”时需要配置。 本账号:源数据库实例和目标数据库实例所属的主账号为同一个腾讯云主账号。 跨账号:源数据库实例和目标数据库实例所属的主账号为不同的腾讯云主账号。跨账号操作指导请参见 云数据库跨账号实例间迁移。 |
| 数据库实例 | 选择源库的实例 ID。 |
| 账号 | 源库 MongoDB 的数据库账号,账号权限需要满足要求。 |
| 密码 | 源库 MongoDB 的数据库账号的密码。 |
目标库设置 | 目标库类型 | 购买时选择的目标库类型,不可修改。 |
| 所属地域 | 购买时选择的目标库地域,不可修改。 |
| 接入类型 | 本场景选择“云数据库”。 |
| 数据库实例 | 选择目标库的实例 ID。 |
| 账号 | 目标库的数据库账号,账号权限需要满足要求。 |
| 密码 | 目标库的数据库账号的密码。 |
示例三:将其他友商 MongoDB(分片集群)通过公网方式迁移至腾讯云数据库。
设置类型 | 配置项 | 说明 |
任务设置 | 任务名称 | 设置一个具有业务意义的名称,便于任务识别。 |
| 运行模式 | 立即执行:完成任务校验通过后立即启动任务。 定时执行:需要配置一个任务执行时间,到时间后启动任务。 |
源库设置 | 源库类型 | 购买时选择的源库类型,不可修改。 |
| 所属地域 | 购买时选择的源库地域,不可修改。 |
| 接入类型 | 公网:源数据库可以通过公网 IP 访问。 云主机自建:源数据库部署在 腾讯云服务器 CVM 上。 专线接入:源数据库可以通过 专线接入 方式与腾讯云私有网络打通。 VPN 接入:源数据库可以通过 VPN 连接 方式与腾讯云私有网络打通。 云数据库:源数据库属于腾讯云数据库实例。 云联网:源数据库可以通过 云联网 与腾讯云私有网络打通。 私有网络 VPC:源数据库和目标数据库都部署在腾讯云上,且有 私有网络。 |
| 架构 | 选择源库的架构形态,本场景以“集群迁移”为例进行介绍。 选择一种架构类型,进行连通性测试后,不能再修改为其他架构类型,否则任务会报错。 |
| 节点 - mongod | 请输入 mongod 节点 IP 和端口,或者域名和端口。多个节点请换行输入;每个 shard 下仅填入一个 mongod 即可,示例:1xx.xx.55.77:6xx9 |
| 节点 - mongos | 请输入 mongos 节点 IP 和端口,或者域名和端口 |
| 节点 - Config Server | 请输入 Config Server 节点的 IP 和端口,或者域名和端口。 |
| 是否需要认证 | 是否需要对源库中用户名和密码的安全性进行认证。 |
| 认证库 | 需要认证的库名,即执行迁移任务账号所属的数据库名称,例如 admin。 |
| 认证机制 | 当前支持 SCRAM-SHA-1。 |
| 账号及密码选择 | 源库三个节点 mongod、mongos、Config Server 的账号密码相同时选择“相同账号及密码”,否则选择“不同的账号及密码”,然后填写节点对应的账号和密码。 |
目标库设置 | 目标库类型 | 购买时选择的目标库类型,不可修改。 |
| 所属地域 | 购买时选择的目标库地域,不可修改。 |
| 接入类型 | 本场景选择“云数据库”。 |
| 数据库实例 | 选择目标库的实例 ID。 |
| 账号 | 目标库的数据库账号,账号权限需要满足要求。 |
| 密码 | 目标库的数据库账号的密码。 |
4. 测试源实例和目标实例的连通性。
如果连通性测试未通过,请参考 连通性测试不通过 进行处理。
5. 在设置迁移选项及选择迁移对象页面,设置迁移选项和迁移对象(可选择部分库表)。
配置项 | 说明 |
迁移类型 | 请根据您的场景选择。 全量迁移:迁移整个数据库,迁移数据仅针对任务发起时,源数据库已有的内容,不包括任务发起后源库实时新增的数据写入。 全量 + 增量迁移:迁移数据包括任务发起时源库的已有内容,也包括任务发起后源库实时新增的数据写入。如果迁移过程中源库有数据写入,需要不停机平滑迁移,请选择此场景。 |
一致性校验 | 当选择“全量 + 增量迁移”时,支持进行数据一致性检测,对迁移后源库和目标库的数据进行详细的对比,确定割接时间。 勾选“全量检测迁移对象”后,迁移任务进行到“同步增量”阶段,目标与源库数据差距为0MB,目标与源库时间延迟也为0秒时,DTS 会自动触发一次一致性校验任务。 未勾选“全量检测迁移对象”,用户也可在任务进行到“同步增量”阶段,手动进行触发,详情可参考 创建数据一致性校验任务。 |
迁移对象 | 整个实例:迁移整个实例,但不包括系统库,如 postgres 中的系统对象,但是会迁移 role 与用户元数据定义。 指定对象:迁移指定对象。 |
指定对象 | 在源库对象中选择待迁移的对象,然后将其移到已选对象框中。 |
6. 在校验任务页面,完成迁移前校验工作,单击启动任务。
如果校验任务不通过,可以参考 校验不通过处理方法 修复问题后重新发起校验任务。
失败:表示校验项检查未通过,任务阻断,需要修复问题后重新执行校验任务。
警告:表示检验项检查不完全符合要求,可以继续任务,但对业务有一定的影响,用户需要根据提示自行评估是忽略警告项还是修复问题再继续。
7. 返回迁移任务列表,待增量同步完成100%,在操作列单击完成,即可完成迁移任务。
选择全量迁移:任务完成后会自动结束,不需要手动结束。
选择全量 + 增量迁移:全量迁移完成后会自动进入增量数据同步阶段,增量数据同步不会自动结束,需要您手动单击完成结束增量数据同步。请在目标与源库时间延迟为0秒时,单击完成。
8. (可选)如果您需要进行查看任务、删除任务等操作,请单击对应的任务,在操作列进行操作,详情可参考 任务管理。
9. 当迁移任务状态变为任务成功时,即可对业务进行正式割接,更多详情可参考 割接说明。