支持的源和目标数据库
源数据库 | 目标数据库 |
---|---|
DDS 3.4/4.0(分片集群) 自建MongoDB 3.4/4.0/4.2/4.4/5.0/6.0(分片集群) |
DDS 3.4/4.0(分片集群) 自建MongoDB 3.4/4.0/4.2/4.4/5.0/6.0(分片集群) |
支持的迁移对象及SQL
迁移对象
- 当前DTS支持集合级(指定集合对象)、库级(整库迁移)迁移。
- 支持索引的结构迁移。
- 库、集合支持做名称映射。
- 不支持迁移admin和local库中的数据。
- 数据迁移仅针对数据源中的用户数据库,而系统库会被自动过滤。
- 支持TAG和RANGE相关内容的迁移,源端和目标端的SHARD按照名称的字典序映射。
增量迁移支持的SQL操作
-
DML
INSERT、UPDATE、REPLACE、DELETE。
-
DDL
当前不支持增量迁移过程中的DDL操作。
数据库账号及权限
数据库 所需权限 参考赋权语句 源库
全量:
mongos用户需要具备admin库的readAnyDatabase权限,config库的read权限;
连接shard的用户需要有admin库的readAnyDatabase权限,有local库的read权限。
增量:
mongos用户需要具备admin库的readAnyDatabase权限,config库的read权限;
连接shard的用户需要具备admin库的readAnyDatabase权限、clusterMonitor权限,local库的read权限。
全量:
db.grantRolesToUser("用户名",[{role:"readAnyDatabase",db:"admin"}, {role:"read",db:"config"}])
db.grantRolesToUser("用户名",[{role:"readAnyDatabase",db:"admin"}, {role:"read",db:"local"}])
增量:
db.grantRolesToUser("用户名",[{role:"readAnyDatabase",db:"admin"}, {role:"read",db:"config"}])
db.grantRolesToUser("用户名",[{role:"readAnyDatabase",db:"admin"}, {role:"clusterMonitor",db:"admin"},{role:"read",db:"local"}])
目标库
mongos用户需要具备admin库的dbAdminAnyDatabase权限,admin库的readWriteAnyDatabase权限以及有admin库的clusterManager权限。
db.grantRolesToUser("用户名",[{role:"dbAdminAnyDatabase",db:"admin"}, {role:"readWriteAnyDatabase",db:"admin"},{role:"clusterManager",db:"admin"}])
迁移规则须知
- 暂不支持同步包含TTL(Time To Live)索引的集合。若待同步的数据库中包含TTL索引,则可能会由于源库和目标库时区、时钟等的不一致,导致数据不一致。
- 不保留事务信息,即源库中的事务同步到目标库时会转变为单条的记录。
- 源端的分片信息会作为目标端分片的依据进行分片键的处理。
- 用户手动配置的任务为主任务,DTS会自动为源端每个分片建立独立的迁移子任务,在主任务详情中可以通过主子任务列表查询每个分片的迁移子任务信息。
操作须知
- 源库须开启Oplog日志。
- 源端、目标端实例的运行状态、复制状态必须正常。
- 在迁移时,如果源库、目标库进行主备切换,将会导致任务异常。
- 选择表级对象迁移时,增量迁移过程中不允许对表进行重命名操作。
- 如迁移对象为表级别,则单次迁移任务仅支持迁移最多1000张表。当超出数量限制,任务可能会报错。如果遇到这种情形,建议您拆分待迁移的表,分批配置成多个任务,或者配置为整库迁移。
- 在DTS迁移期间,不允许有除DTS外的数据写入目标库,否则会导致源库与目标库数据不一致。
- 目标库若已存在行数据,DTS在增量迁移过程中源库相同主键的数据将覆盖目标库已存在的数据,因此在迁移前需要用户自行判断数据是否需要清除,建议用户在迁移前自行清空目标库。
- 在磁盘空间允许的情况下,建议源数据库oplog保存大小或时间越大越好。否则DTS在增量迁移时可能因无法获取oplog而导致任务失败。如果由于您所设置的oplog日志保存策略低于DTS要求的时间进而导致的问题,不在DTS的SLA保障范围内。
- 迁移过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
- 全量初始化会并发执行INSERT操作,导致目标数据库的集合产生碎片,因此全量初始化完成后目标实例的集合空间比源实例的集合空间大。建议目标库的存储空间比源库大10%以上。
- 建议源和目标库的MongoDB的数据库版本保持一致,或者从低版本同步到高版本以保障兼容性。如为高版本同步至低版本,可能存在数据库兼容性问题。
- 执行数据迁移前需评估源库和目标库的性能,同时建议业务低峰期执行数据迁移,否则全量数据初始化时将占用源库和目标库一定的读写资源,可能会导致数据库的负载上升。
操作步骤
1、购买DTS数据迁移实例。
在管理控制台点击“创建实例”进入订购页面,“实例类型”选择“数据迁移”,网络接入类型可以选择“VPC网络”或“公网EIP”,网络接入类型不同时,操作步骤如下:
- 当网络接入类型选择“VPC网络”时,“目标库实例”的“数据库类型”选择“DDS/MongoDB”,并在“选择实例”下拉框中选择数据库实例(请注意选择数据库架构类型为分片集群的实例),选择“链路类型”、“链路规格”,完成其他信息的填写并完成购买。
- 当网络接入类型选择“公网EIP”时,可以通过“选择数据库实例”或“输入IP地址及端口”两种方式之一来设置目标库实例:
- 当按“选择数据库实例”方式时,在“选择实例”下拉框中选择数据库实例(请注意选择数据库架构类型为分片集群的实例),选择“链路类型”、“链路规格”,完成其他信息的填写并完成购买。
- 当按“输入IP地址及端口”方式时,“数据库类型”选择DDS/MongoDB后,会出现“数据库架构类型”的选项,请选择“分片集群”,然后在mongos信息中填写IP地址、端口(最多允许填写16组),选择“链路类型”、“链路规格”,完成其他信息的填写并完成购买。
说明文档数据库有副本集、分片集群等不同的架构,在网络访问方面与其他数据库相比具有一定的差异性,迁移前请您详细阅读迁移数据到天翼云DDS数据库的网络准备章节内容,了解并做好网络方面的准备工作。
2、进入实例配置页面。
DTS实例购买成功后,进入【数据迁移】实例列表页面,上一步骤购买成功的实例在实例列表中显示状态为“待配置”,进入实例配置页面的操作分两种情况:
- 当DTS实例的网络接入类型为“公网EIP”时,请先点击“绑定弹性IP”按钮完成公网弹性IP的绑定,然后点击该实例操作列的“实例配置”按钮。
- 当DTS实例网络接入类型为“VPC网络”时,直接点击该实例操作列的“实例配置”按钮。
3、配置源库及目标库信息。
进入实例配置第一个步骤的【配置源库及目标库信息】页面,填入源库与目标库的相关配置信息:
- 源库:“数据库类型”请选择DDS/MongoDB,选择资源池,“数据库架构类型”请选择分片集群,输入源库IP地址、端口、鉴权数据库名称(默认为admin)、数据库账号、数据库密码、shard接入信息(支持填写多个IP:Port,请确保所填写的多个IP地址属于同一个分片。格式:IP和Port之间以英文冒号分隔,多组IP:Port之间用英文逗号隔开。例如:192.168.0.1:8080,192.168.0.2:8080)、shard账号、shard密码等。
- 目标库:输入鉴权数据库名称(默认为admin)、数据库账号、数据库密码。
完成上述信息的填写后,点击源数据库和目标数据库的“测试连接”按钮进行数据库连接测试,检查数据库能否正常连接。
4、配置迁移对象及高级配置。
源库和目标库连通性测试成功后,点下一步按钮,进入实例配置第二个步骤的【配置迁移对象及高级配置】页面,在“源库对象”中选择要迁移的源库对象,包含:DATABASE、COLLECTION,选中后点击“>”按钮,将待迁移对象移动到“已选择对象”中。
说明关于配置迁移对象及高级配置页面的详细说明,请参考数据传输服务 - 用户指南 - 数据迁移 - 实例管理 - 配置迁移实例文档中配置迁移对象及高级配置详细说明。
5、预检查和启动迁移。
完成迁移对象和高级配置后,点击“下一步预检查”,进入实例配置第三个步骤的【预检查】页面。预检查会检查如下列表信息,并给出检查结果,用户可以依据检查结果进行下一步操作。
检查项 | 检查内容 |
---|---|
DDS/MongoDB版本检查 | 检查源库和目标库的DDS/MongoDB版本是不是符合要求。 |
源库Balancer关闭检查 | 检查源库Balancer是否关闭。 |
源库包含TTL的索引检查 | 检查源库是否存在TTL索引的集合,若存在,则导致迁移后数据不一致。 |
源库shard用户权限检查 | 检查源库用于DTS任务的shard用户是否具有相应的权限。 |
源库分片集群孤儿文档检查 | 检查源库孤儿文档是否清理。 |
源库和目标库固定集合一致性检查 | 源库和目标库固定集合需要保持一致,否则迁移失败。 |
源库映射后对象名长度校验 | 校验源数据库映射后迁移对象名是否超过63位。 |
源库映射后的库名、集合名检查 | 检查源库映射后的库名、集合名是否符合规范。 |
源库用户权限检查 | 检查源库用于DTS任务的用户是否具有相应的权限。 |
源库连通性检查 | 检查数据传输服务DTS能否连通源数据库。 |
源库集合的唯一索引个数检查 | 检查源库的集合唯一索引数是否大于1。 |
源库集合的索引个数检查 | 检查源数据库是否存在索引数量大于10的集合。 |
目标库同名数据库的同名非空集合检查 | 检查目标数据库是否存在与源库数据库同名的同名非空集合,若存在,会导致已存在数据库被覆盖,无法完成迁移。 |
目标库实例状态检查 | 检查目标数据库实例的状态是否正常,目标库实例状态必须正常。 |
目标库用户权限检查 | 检查目标库用于DTS任务的用户是否具有相应的权限。 |
目标库磁盘空间检查 | 检查目标数据库是否有足够的磁盘空间。 |
目标库连通性检查 | 检查数据传输服务DTS能否连通目标数据库。 |
如果预检查通过,可点击【预检查】页面底部的“启动迁移”按钮,开始迁移任务。