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