DRS预检查项一览表
DRS迁移过程一般包含四个阶段:任务启动阶段、全量阶段、增量阶段、结束任务阶段(单全量任务则包含三个阶段)。为了确保迁移各个阶段的平顺,DRS在任务正式启动前,会对任务源数据库、目标数据库中的参数、对象等信息进行自动化的扫描和检测,帮助您提高数据迁移的成功率,常见的预检查项清单如下所示。
概览
根据迁移任务的源数据库类型,查看预检查信息:
- 源数据库为MySQL的迁移链路预检查一览表:
- 源数据库为MySQL分库分表的迁移链路预检查一览表:
- 源数据库为MongoDB的迁移链路预检查一览表:
- 源数据库为DDS的迁移链路预检查一览表:
MySQL->MySQL
分类 |
预检查项 |
检查项详情 |
不通过解决方法 |
---|---|---|---|
权限类 |
源数据库权限 |
详见MySQL权限授权方法。 |
|
目标数据库权限 |
详见MySQL权限授权方法。 |
||
版本类 |
源数据库版本 |
支持5.5、5.6、5.7、8.0版本。 |
详见支持的数据库。 |
目标数据库版本 |
支持5.5、5.6、5.7、8.0版本。 |
详见支持的数据库。 |
|
迁移版本检查 |
仅支持目标数据库版本等于或高于源数据库版本。 |
||
参数类 |
GTID状态 |
源数据库GTID状态建议为开启状态,源数据库实例没有开启GTID的情况下不支持主备倒换,DRS任务会因为位点不续接而中断导致无法恢复。 |
详见源库的GTID功能检查。 |
性能参数 |
源数据库建议开启skip-name-resolve,减少连接超时的可能性。 |
- |
|
源数据库log_slave_updates参数需设置为开启状态,否则会导致迁移失败。 |
|||
源数据库的binlog_row_image参数需设置为full,否则会导致迁移失败。 |
|||
最大允许传输包的大小 |
DRS在迁移数据量大或迁移大字段情况下,源库max_allowed_packet参数过小可能会导致任务失败。 |
||
DRS在迁移数据量大或迁移大字段情况下,目标库的max_allowed_packet参数值过小导致目标库数据无法写入造成全量迁移失败。 |
|||
sql_mode取值检查 |
迁移的对象中包含引擎为MyISAM的表,则目标数据库sql_mode不能包含no_engine_substitution参数,否则可能会导致迁移失败。 |
||
增量迁移类 |
Binlog开启 |
增量迁移时,源数据库的Binlog日志必须打开,且Binlog日志格式必须为Row格式。 |
|
Binlog保留时长 |
在磁盘空间允许的情况下,建议源数据库Binlog保存时间越长越好,建议为3天,设置为0,可能会导致迁移失败。
|
||
server_id值设置 |
增量迁移时,必须设置MySQL源数据库的server_id。
|
||
session变量设置 |
增量迁移时,如果设置session变量character_set_client为binary,可能导致乱码。 |
- |
|
目标数据库检查 |
磁盘空间检查 |
目标数据库实例必须有足够的磁盘空间。 |
|
状态检查 |
目标数据库实例实例状态必须正常。 |
- |
|
一致性检查 |
字符集 |
目标库和源库的字符集需要一致。 |
|
字符序 |
目标库和源库的collation_server需要一致。 |
||
时区 |
目标库和源库的time_zone需要一致。 |
||
大小写敏感 |
目标库和源库的lower_case_table_names参数设置需要一致。 |
||
事务隔离级别 |
目标库和源库事务隔离级别需要一致。 |
详见事务隔离级别一致性校验。 |
|
group_concat函数计算结果字符的最大长度 |
目标库和源库的group_concat_max_len参数需要一致 |
||
server_uuid参数 |
目标库和源库server_uuid参数不能相同。 |
||
InnoDB检查模式 |
目标库和源库innodb_strict_mode需要一致。 |
||
数据块加密参数 |
目标库和源库block_encryption_mode需要一致。 |
- |
|
SQL模式 |
目标库和源库sql_mode需要一致。 |
||
迁移对象类 |
选择对象检查 |
|
- |
无主键表检查 |
由于无主键表的性能低于主键表的性能,建议将无主键表修改为主键表。 |
详见源库无主键表检查。 |
|
关联对象检查 |
相互关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。 |
||
外键引用操作检查 |
不支持外键级联操作。当外键是普通索引的时候,可能会导致表结构创建失败,建议改成唯一索引。 |
||
同名检查 |
除了MySQL系统数据库之外,目标数据库不能包含与源数据库同名的数据库。 |
||
表名规范检查 |
|
- |
|
加密表检查 |
当源库存在加密的表,需要确认目标库是否支持。如果目标库不支持,存在任务失败等风险。 |
详见源库加密表检查。 |
MySQL->DDM
分类 |
预检查项 |
检查项详情 |
不通过解决方法 |
---|---|---|---|
权限类 |
源数据库权限 |
详见MySQL权限授权方法。 |
|
目标数据库权限 |
|
详见DDM权限授权方法。 |
|
版本类 |
源数据库版本 |
支持5.5、5.6、5.7、8.0版本。 |
详见支持的数据库。 |
目标数据库版本 |
DDM实例版本。 |
详见支持的数据库。 |
|
参数类 |
GTID状态 |
源数据库GTID状态建议为开启状态,源数据库实例没有开启GTID的情况下不支持主备倒换,DRS任务会因为位点不续接而中断导致无法恢复。 |
详见源库的GTID功能检查。 |
性能参数 |
源数据库建议开启skip-name-resolve,减少连接超时的可能性。 |
- |
|
源数据库log_slave_updates参数需设置为开启状态,否则会导致迁移失败。 |
|||
源数据库的binlog_row_image参数需设置为full,否则会导致迁移失败。 |
|||
最大允许传输包的大小 |
DRS在迁移数据量大或迁移大字段情况下,源库max_allowed_packet参数过小可能会导致任务失败。 |
||
DRS在迁移数据量大或迁移大字段情况下,目标库的max_allowed_packet参数值过小导致目标库数据无法写入造成全量迁移失败。 |
|||
sql_mode取值检查 |
迁移的对象中包含引擎为MyISAM的表,则目标数据库sql_mode不能包含no_engine_substitution参数,否则可能会导致迁移失败。 |
||
增量迁移类 |
Binlog开启 |
增量迁移时,源数据库的Binlog日志必须打开,且Binlog日志格式必须为Row格式。 |
|
Binlog保留时长 |
在磁盘空间允许的情况下,建议源数据库Binlog保存时间越长越好,建议为3天,设置为0,可能会导致迁移失败。
|
||
server_id值设置 |
增量迁移时,必须设置MySQL源数据库的server_id。
|
||
session变量设置 |
增量迁移时,如果设置session变量character_set_client为binary,可能导致乱码。 |
- |
|
目标数据库检查 |
磁盘空间检查 |
目标数据库实例必须有足够的磁盘空间。 |
|
状态检查 |
目标数据库实例实例状态必须正常。 |
- |
|
参数auto_increment校验 |
目标数据库存在表的auto_increment值至少不能小于源库表的auto_increment值。 |
- |
|
一致性检查 |
字符集 |
目标库和源库的字符集需要一致。 |
|
字符序 |
目标库和源库的collation_server需要一致。 |
||
时区 |
目标库和源库的time_zone需要一致。 |
||
大小写敏感 |
目标库和源库的lower_case_table_names参数设置需要一致。 |
||
事务隔离级别 |
目标库和源库事务隔离级别需要一致。 |
详见事务隔离级别一致性校验。 |
|
group_concat函数计算结果字符的最大长度 |
目标库和源库的group_concat_max_len参数需要一致 |
||
server_uuid参数 |
目标库和源库server_uuid参数不能相同。 |
||
InnoDB检查模式 |
目标库和源库innodb_strict_mode需要一致。 |
||
数据块加密参数 |
目标库和源库block_encryption_mode需要一致。 |
- |
|
SQL模式 |
目标库和源库sql_mode需要一致。 |
||
表结构 |
|
- |
|
迁移对象类 |
选择对象检查 |
|
- |
无主键表检查 |
由于无主键表的性能低于主键表的性能,建议将无主键表修改为主键表。 |
详见源库无主键表检查。 |
|
关联对象检查 |
相互关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。 |
||
外键引用操作检查 |
不支持外键级联操作。当外键是普通索引的时候,可能会导致表结构创建失败,建议改成唯一索引。 |
||
表名规范检查 |
|
- |
|
加密表检查 |
当源库存在加密的表,需要确认目标库是否支持。如果目标库不支持,存在任务失败等风险。 |
详见源库加密表检查。 |
MySQL->GaussDB(for MySQL)
分类 |
预检查项 |
检查项详情 |
不通过解决方法 |
---|---|---|---|
权限类 |
源数据库权限 |
详见MySQL权限授权方法。 |
|
目标数据库权限 |
详见MySQL权限授权方法。 |
||
版本类 |
源数据库版本 |
支持5.5、5.6、5.7、8.0版本。 |
详见支持的数据库。 |
目标数据库版本 |
支持GaussDB(for MySQL) 8.0版本。 |
详见支持的数据库。 |
|
迁移版本检查 |
仅支持目标数据库版本等于或高于源数据库版本。 |
||
参数类 |
GTID状态 |
源数据库GTID状态建议为开启状态,源数据库实例没有开启GTID的情况下不支持主备倒换,DRS任务会因为位点不续接而中断导致无法恢复。 |
详见源库的GTID功能检查。 |
性能参数 |
源数据库建议开启skip-name-resolve,减少连接超时的可能性。 |
- |
|
源数据库log_slave_updates参数需设置为开启状态,否则会导致迁移失败。 |
|||
源数据库的binlog_row_image参数需设置为full,否则会导致迁移失败。 |
|||
最大允许传输包的大小 |
DRS在迁移数据量大或迁移大字段情况下,源库max_allowed_packet参数过小可能会导致任务失败。 |
||
DRS在迁移数据量大或迁移大字段情况下,目标库的max_allowed_packet参数值过小导致目标库数据无法写入造成全量迁移失败。 |
|||
sql_mode取值检查 |
迁移的对象中包含引擎为MyISAM的表,则目标数据库sql_mode不能包含no_engine_substitution参数,否则可能会导致迁移失败。 |
||
增量迁移类 |
Binlog开启 |
增量迁移时,源数据库的Binlog日志必须打开,且Binlog日志格式必须为Row格式。 |
|
Binlog保留时长 |
在磁盘空间允许的情况下,建议源数据库Binlog保存时间越长越好,建议为3天,设置为0,可能会导致迁移失败。
|
||
server_id值设置 |
增量迁移时,必须设置MySQL源数据库的server_id。
|
||
session变量设置 |
增量迁移时,如果设置session变量character_set_client为binary,可能导致乱码。 |
- |
|
目标数据库检查 |
磁盘空间检查 |
目标数据库实例必须有足够的磁盘空间。 |
|
状态检查 |
目标数据库实例实例状态必须正常。 |
- |
|
一致性检查 |
字符集 |
目标库和源库的字符集需要一致。 |
|
字符序 |
目标库和源库的collation_server需要一致。 |
||
时区 |
目标库和源库的time_zone需要一致。 |
||
大小写敏感 |
目标库和源库的lower_case_table_names参数设置需要一致。 |
||
事务隔离级别 |
目标库和源库事务隔离级别需要一致。 |
详见事务隔离级别一致性校验。 |
|
group_concat函数计算结果字符的最大长度 |
目标库和源库的group_concat_max_len参数需要一致 |
||
server_uuid参数 |
目标库和源库server_uuid参数不能相同。 |
||
InnoDB检查模式 |
目标库和源库innodb_strict_mode需要一致。 |
||
数据块加密参数 |
目标库和源库block_encryption_mode需要一致。 |
- |
|
SQL模式 |
目标库和源库sql_mode需要一致。 |
||
迁移对象类 |
选择对象检查 |
|
- |
无主键表检查 |
由于无主键表的性能低于主键表的性能,建议将无主键表修改为主键表。 |
详见源库无主键表检查。 |
|
关联对象检查 |
相互关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。 |
||
外键引用操作检查 |
不支持外键级联操作。当外键是普通索引的时候,可能会导致表结构创建失败,建议改成唯一索引。 |
||
同名检查 |
除了MySQL系统数据库之外,目标数据库不能包含与源数据库同名的数据库。 |
||
表名规范检查 |
|
- |
|
加密表检查 |
当源库存在加密的表,需要确认目标库是否支持。如果目标库不支持,存在任务失败等风险。 |
详见源库加密表检查。 |
MySQL分库分表->DDM
分类 |
预检查项 |
检查项详情 |
不通过解决方法 |
---|---|---|---|
权限类 |
源数据库权限 |
详见MySQL权限授权方法。 |
|
目标数据库权限 |
|
详见DDM权限授权方法。 |
|
版本类 |
源数据库版本 |
DDM实例版本。 |
详见支持的数据库。 |
目标数据库版本 |
DDM实例版本。 |
详见支持的数据库。 |
|
参数类 |
GTID状态 |
源数据库GTID状态建议为开启状态,源数据库实例没有开启GTID的情况下不支持主备倒换,DRS任务会因为位点不续接而中断导致无法恢复。 |
详见源库的GTID功能检查。 |
性能参数 |
源数据库建议开启skip-name-resolve,减少连接超时的可能性。 |
- |
|
源数据库log_slave_updates参数需设置为开启状态,否则会导致迁移失败。 |
|||
源数据库的binlog_row_image参数需设置为full,否则会导致迁移失败。 |
|||
增量迁移类 |
Binlog开启 |
增量迁移时,源数据库的Binlog日志必须打开,且Binlog日志格式必须为Row格式。 |
|
Binlog保留时长 |
在磁盘空间允许的情况下,建议源数据库Binlog保存时间越长越好,建议为3天,设置为0,可能会导致迁移失败。
|
||
server_id值设置 |
增量迁移时,必须设置MySQL源数据库的server_id。
|
||
目标数据库检查 |
磁盘空间检查 |
目标数据库实例必须有足够的磁盘空间。 |
|
状态检查 |
目标数据库实例实例状态必须正常。 |
- |
|
参数auto_increment校验 |
目标数据库存在表的auto_increment值至少不能小于源库表的auto_increment值。 |
- |
|
一致性检查 |
字符集 |
目标库和源库的字符集需要一致。 |
|
字符序 |
目标库和源库的collation_server需要一致。 |
||
表结构 |
|
- |
|
迁移对象类 |
选择对象检查 |
|
- |
无主键表检查 |
由于无主键表的性能低于主键表的性能,建议将无主键表修改为主键表。 |
详见源库无主键表检查。 |
|
关联对象检查 |
相互关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。 |
||
外键引用操作检查 |
不支持外键级联操作。当外键是普通索引的时候,可能会导致表结构创建失败,建议改成唯一索引。 |
||
目标库对象检查 |
目标库若已存在数据,DRS在增量迁移过程中源库相同主键的数据将覆盖目标库已存在的数据,因此在迁移前需要用户自行判断数据是否需要清除,建议用户在迁移前自行清空目标库。 |
- |
|
表名规范检查 |
|
- |
MongoDB->DDS
分类 |
预检查项 |
检查项详情 |
不通过解决方法 |
---|---|---|---|
权限类 |
源数据库权限 |
|
详见MongonDB授权方法。 |
目标数据库权限 |
连接目标数据库的用户需要有admin库的dbAdminAnyDatabase权限,有目标数据库的readWrite权限。 对于目标数据库是集群的实例,迁移账号还要有admin库的clusterManager权限。 |
详见DDS授权方法。 |
|
版本类 |
源数据库版本 |
支持3.2、3.4、3.6、4.0、4.2、4.4版本。 |
详见支持的数据库。 |
目标数据库版本 |
支持3.4、4.0、4.2、4.4版本。 |
详见支持的数据库。 |
|
迁移版本检查 |
仅支持目标数据库版本等于或高于源数据库版本。 |
||
增量迁移类 |
Oplog开启 |
增量迁移时,源数据库的Oplog日志必须打开。 |
- |
Oplog保留时长 |
在磁盘空间允许的情况下,建议源数据库Oplog保存时间越长越好,建议为3天。 |
- |
|
Balancer关闭 |
如果迁移任务是源数据集群的增量,则源数据必须关闭Balancer。 |
||
孤儿文档检查 |
如果是源数据为集群的全量+增量迁移任务,则源数据库必须关闭Balancer并清理孤儿文档。 |
||
目标数据库检查 |
磁盘空间检查 |
目标数据库实例必须有足够的磁盘空间。 |
|
集群到集群的全量迁移,如果源数据库的集群没有开启分片,则需要保证目标数据库主shard节点的磁盘空间大于源数据库数据大小。 |
|||
状态检查 |
目标数据库实例实例状态必须正常。 |
- |
|
chunk数目检查 |
检查目标数据库的最大chunk数目是否足以支撑源库数据的分片分裂,当chunk个数达到目标库的最大支撑数目时,chunk不再分裂,会影响写入性能。 |
||
一致性检查 |
固定集合检查 |
检查源库和目标库数据库固定集合是否一致,若不一致,则导致迁移失败。 |
|
迁移对象类 |
关联对象检查 |
相互关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。 |
- |
角色依赖检查 |
在进行用户迁移时,若所选迁移的用户与某些角色存在依赖关系,需要同时选择迁移该用户及所依赖的角色,否则会导致迁移失败。 |
详见源数据库角色依赖检查。 |
|
账号依赖检查 |
在进行用户迁移时,若所选迁移的用户与某些角色存在依赖关系,需要同时选择迁移该用户及所依赖的角色,否则会导致迁移失败。 |
详见源数据库账号依赖检查。 |
|
同名检查 |
目标数据库不能存在与源数据库同名的数据库下的同名非空集合。 |
||
目标数据库不能存在和源数据库同名数据库下的同名视图。 |
|||
名称检查 |
源数据库的库名不能包含/\."$和空格,集合名和视图名中不能包含$字符或以system.开头。 |
- |
|
复合哈希索引检查 |
|
详见源库集合复合哈希索引检查。 |
|
复合哈希分片键检查 |
|||
索引检查 |
源库若存在没有索引(_id)的集合,可能导致迁移失败。 |
||
TTL索引检查 |
TTL索引会因为源数据库和目标库数据的时区,时钟不一致导致迁移后数据不一致。 |
||
索引个数检查 |
索引的个数会影响整个迁移的时间,检查源数据库是否存在索引个数大于10的集合,若存在会影响迁移速度。 |
详见源数据库集合索引个数检查。 |
MongoDB->GeminiDB Mongo
分类 |
预检查项 |
检查项详情 |
不通过解决方法 |
---|---|---|---|
权限类 |
源数据库权限 |
|
详见MongonDB授权方法。 |
目标数据库权限 |
连接目标数据库的用户需要有admin库的dbAdminAnyDatabase权限,有目标数据库的readWrite权限。 对于目标数据库是集群的实例,迁移账号还要有admin库的clusterManager权限。 |
详见MongonDB授权方法。 |
|
版本类 |
源数据库版本 |
支持3.2、3.4、4.0、4.2版本。 |
详见支持的数据库。 |
目标数据库版本 |
支持3.4、4.0版本。 |
详见支持的数据库。 |
|
迁移版本检查 |
仅支持目标数据库版本等于或高于源数据库版本。 |
||
增量迁移类 |
Oplog开启 |
增量迁移时,源数据库的Oplog日志必须打开。 |
- |
Oplog保留时长 |
在磁盘空间允许的情况下,建议源数据库Oplog保存时间越长越好,建议为3天。 |
- |
|
Balancer关闭 |
如果迁移任务是源数据集群的增量,则源数据必须关闭Balancer。 |
||
孤儿文档检查 |
如果是源数据为集群的全量+增量迁移任务,则源数据库必须关闭Balancer并清理孤儿文档。 |
||
目标数据库检查 |
磁盘空间检查 |
目标数据库实例必须有足够的磁盘空间。 |
|
集群到集群的全量迁移,如果源数据库的集群没有开启分片,则需要保证目标数据库主shard节点的磁盘空间大于源数据库数据大小。 |
|||
状态检查 |
目标数据库实例实例状态必须正常。 |
- |
|
chunk数目检查 |
检查目标数据库的最大chunk数目是否足以支撑源库数据的分片分裂,当chunk个数达到目标库的最大支撑数目时,chunk不再分裂,会影响写入性能。 |
||
一致性检查 |
固定集合检查 |
检查源库和目标库数据库固定集合是否一致,若不一致,则导致迁移失败。 |
|
迁移对象类 |
关联对象检查 |
相互关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。 |
- |
角色依赖检查 |
在进行用户迁移时,若所选迁移的用户与某些角色存在依赖关系,需要同时选择迁移该用户及所依赖的角色,否则会导致迁移失败。 |
详见源数据库角色依赖检查。 |
|
账号依赖检查 |
在进行用户迁移时,若所选迁移的用户与某些角色存在依赖关系,需要同时选择迁移该用户及所依赖的角色,否则会导致迁移失败。 |
详见源数据库账号依赖检查。 |
|
同名检查 |
目标数据库不能存在与源数据库同名的数据库下的同名非空集合。 |
||
目标数据库不能存在和源数据库同名数据库下的同名视图。 |
|||
名称检查 |
源数据库的库名不能包含/\."$和空格,集合名和视图名中不能包含$字符或以system.开头。 |
- |
|
索引检查 |
源库若存在没有索引(_id)的集合,可能导致迁移失败。 |
||
TTL索引检查 |
TTL索引会因为源数据库和目标库数据的时区,时钟不一致导致迁移后数据不一致。 |
||
索引个数检查 |
索引的个数会影响整个迁移的时间,检查源数据库是否存在索引个数大于10的集合,若存在会影响迁移速度。 |
详见源数据库集合索引个数检查。 |
DDS->MongoDB
分类 |
预检查项 |
检查项详情 |
不通过解决方法 |
---|---|---|---|
权限类 |
源数据库权限 |
|
详见DDS授权方法。 |
目标数据库权限 |
连接目标数据库的用户需要有admin库的dbAdminAnyDatabase权限,有目标数据库的readWrite权限。 对于目标数据库是集群的实例,迁移账号还要有admin库的clusterManager权限。 |
详见MongonDB授权方法。 |
|
版本类 |
源数据库版本 |
支持3.2、3.4、3.6、4.0、4.2、4.4版本。 |
详见支持的数据库。 |
目标数据库版本 |
支持3.2、3.6、3.4、4.0、4.2、4.4版本。 |
详见支持的数据库。 |
|
迁移版本检查 |
仅支持目标数据库版本等于或高于源数据库版本。 |
||
增量迁移类 |
Oplog开启 |
增量迁移时,源数据库的Oplog日志必须打开。 |
- |
Oplog保留时长 |
在磁盘空间允许的情况下,建议源数据库Oplog保存时间越长越好,建议为3天。 |
- |
|
Balancer关闭 |
如果迁移任务是源数据集群的增量,则源数据必须关闭Balancer。 |
||
孤儿文档检查 |
如果是源数据为集群的全量+增量迁移任务,则源数据库必须关闭Balancer并清理孤儿文档。 |
||
目标数据库检查 |
磁盘空间检查 |
目标数据库实例必须有足够的磁盘空间。 |
|
状态检查 |
目标数据库实例实例状态必须正常。 |
- |
|
chunk数目检查 |
检查目标数据库的最大chunk数目是否足以支撑源库数据的分片分裂,当chunk个数达到目标库的最大支撑数目时,chunk不再分裂,会影响写入性能。 |
||
一致性检查 |
固定集合检查 |
检查源库和目标库数据库固定集合是否一致,若不一致,则导致迁移失败。 |
|
迁移对象类 |
关联对象检查 |
相互关联的数据对象要确保同时迁移,避免迁移因关联对象缺失,导致迁移失败。 |
- |
同名检查 |
目标数据库不能存在与源数据库同名的数据库下的同名非空集合。 |
||
目标数据库不能存在和源数据库同名数据库下的同名视图。 |
|||
名称检查 |
源数据库的库名不能包含/\."$和空格,集合名和视图名中不能包含$字符或以system.开头。 |
- |
|
索引个数检查 |
索引的个数会影响整个迁移的时间,检查源数据库是否存在索引个数大于10的集合,若存在会影响迁移速度。 |
详见源数据库集合索引个数检查。 |