数据库参数检查
1、源库Oplog开启检查
失败原因 | 处理建议 |
---|---|
源数据库Oplog未开启。 | 请确保已经开启Oplog,副本集默认自动开启Oplog。
|
2、目标库实例状态检查
失败原因 | 处理建议 |
---|---|
目标库实例状态不正常。 | 请检查目标库实例状态,需保证为正常状态。
|
3、目标库磁盘空间检查
失败原因 | 处理建议 |
---|---|
无法建立与源库的连接获取待迁移数据量规模,因此无法执行此项检查。 | 请检查源库是否连接成功。 |
无法建立与目标库的连接,因此无法执行此项检查。 | 请检查目标库是否连接成功。 |
目标库磁盘空间不足,剩余磁盘空间大小<建议值。 | 建议扩容目标库或清理目标库空间。 目标数据库磁盘空间建议大小,取以下两种中的小值:
|
4、源库Balancer关闭检查
失败原因 | 处理建议 |
---|---|
源库为集群的增量任务,Balancer未关闭。 | 分片集群增量迁移任务,Balancer必须关闭。 先执行use config,切换到config库,执行以下命令: while( sh.isBalancerRunning() ) { print("waiting..."); sleep(1000); }
|
数据库用户权限检查
1、源库用户权限检查
失败原因 | 处理建议 |
---|---|
连接源库的用户需要具备admin库的readAnyDatabase权限、clusterMonitor权限,local库的read权限。 |
|
连接源库的用户需要具备admin库的readAnyDatabase权限、clusterMonitor权限。 |
|
连接源库mongos的用户需要具备admin库的readAnyDatabase权限,config库的read权限。 |
|
连接源库shard的用户需要具备admin库的readAnyDatabase权限、clusterMonitor权限,local库的read权限。 |
|
2、目标库用户权限检查
失败原因 | 处理建议 |
---|---|
连接目标库的用户需要具备admin库的dbAdminAnyDatabase权限、readWriteAnyDatabase权限、clusterMonitor权限。 |
|
连接目标库的用户需要具备admin库的dbAdminAnyDatabase权限,admin库的readWriteAnyDatabase权限、clusterManager权限。 |
|
网络情况检查
1、源库连通性检查
失败原因 | 处理建议 |
---|---|
源数据库账号或密码不正确。 | 输入正确的数据库账号和密码后重新执行预检查。 |
源数据库所在网络或服务器设置了防火墙。 | 查看数据库所在的网络防火墙是否限制了DTS的IP地址段,如果有,关闭防火墙或者将DTS的IP地址加入防火墙白名单中。 |
源数据库迁移账号登录权限不足。 | 登录源库,为迁移账号添加相应的远程访问权限。 |
网络互通问题。 | 联系数据库所在机器管理人员和DTS部署机器管理人员排查问题。 |
2、目标库连通性检查
失败原因 | 处理建议 |
---|---|
目标数据库账号或密码不正确。 | 输入正确的数据库账号和密码后重新执行预检查。 |
目标数据库所在网络或服务器设置了防火墙。 | 查看数据库所在的网络防火墙是否限制了DTS的IP地址段,如果有,关闭防火墙或者将DTS的IP地址加入防火墙白名单中。 |
目标库迁移账号登录权限不足。 | 登录目标库,为迁移账号添加相应的远程访问权限。 |
网络互通问题。 | 联系数据库所在机器管理人员和DTS部署机器管理人员排查问题。 |
数据库对象检查
1、源库和目标库固定集合一致性检查
失败原因 | 处理建议 |
---|---|
用户选择迁移集合在目标库已经存在,并且是固定集合。 | 为了保证数据的一致性,可以删除目标库已经存在的和用户选择迁移的同名集合,或者选择不迁移这些冲突的集合。 |
源数据库的集合是固定集合,但是目标数据库存在和源库固定集合名称相同的普通集合。 | 为了保证数据的一致性,可以删除目标库已经存在的和源库选择的固定集合的同名集合,或者选择不迁移这些冲突的固定集合。 |
2、目标库存在与源库同名的非空集合检查
失败原因 | 处理建议 |
---|---|
无法建立与源库的连接,因此无法执行此项检查。 | 请检查源库是否连接成功。 |
无法建立与目标库的连接,因此无法执行此项检查。 | 请检查目标库是否连接成功。 |
目标库存在与源库同名的非空集合。 | 请根据实际情况判断是否保留与源库同名的目标库下的同名非空集合,如果保留可能导致源库和目标库迁移后数据不一致。 |
3、源库映射后的库名、集合名检查
失败原因 | 处理建议 |
---|---|
映射后存在不符合规范的库名。 | 请确保源数据库映射后的库名不包含/\"$*<>:?.|和空格。 |
映射后存在不符合规范的集合名。 | 请确保映射后集合名中不包含$字符且不以system.开头。 |
4、源库集合的索引个数检查
失败原因 | 处理建议 |
---|---|
源库存在索引数量大于10的集合,这类集合将导致迁移速度较慢。 |
|
失败原因 | 处理建议 |
---|---|
源库存在包含TTL索引的集合,这可能会影响迁移过程中的数据完整性,时钟不一致导致数据不一致。 |
|
失败原因 | 处理建议 |
---|---|
| 请检查源库或目标库填写的副本集名称是否正确。 |
7、分片集群源库孤儿文档检查
失败原因 | 处理建议 |
---|---|
源库为分片集群,孤儿文档未被清理可能会导致迁移任务数据不一致和产生报错问题。 | 分片集群增量迁移任务,源数据库必须关闭Balancer并清理孤儿文档。 步骤1:请在可以连接分片集群实例的服务器上,创建一个用于清理孤立文档的JS脚本,脚本名称为cleanupOrphaned.js,内容如下: function cleanupOrphaned(coll) { var nextKey = { }; var result;
while ( nextKey != null ) { result = db.adminCommand( { cleanupOrphaned: coll, startingFromKey: nextKey } );
if (result.ok != 1) print("Unable to complete at this time: failure or timeout.")
printjson(result);
nextKey = result.stoppedAtKey; } } var dbName = 'yourDbName' db = db.getSiblingDB(dbName) db.getCollectionNames().forEach(function(collName) { cleanupOrphaned(dbName + "." + collName); }); 步骤2:将yourDbName替换为待清理孤儿文档的数据库名,执行命令,清理Shard节点下指定的数据库中所有集合的孤儿文档: mongo --host ShardIP --port Primaryport --authenticationDatabase database -u username -p password cleanupOrphaned.js 其中ShardIP:Shard节点的IP地址;Primaryport:Shard节点中的Primary节点的服务端口;database:鉴权数据库名,即数据库账号所属的数据库;username:登录数据库的账号;password:登录数据库的密码。 如果存在多个数据库,您需要重复执行步骤1和2,分别为每个数据库的每个Shard节点清理孤立文档。 |
8、唯一索引数量检查
失败原因 | 处理建议 |
---|---|
目标为分片集群的情况,源库集合的唯一索引数量大于1。 | 在源库集合有多个唯一索引的情况下,目标端为分片集群时,由于分片集群只允许单一唯一索引,在迁移过程中会选择一个唯一索引进行迁移,请用户确认是否删除其他唯一索引或继续迁移。 如果继续迁移,DTS选择迁移单个唯一索引,并在此唯一索引上建立分片键。删除索引的参考命令为: db.集合名.dropIndex(索引名) |