实时同步链路在启动之前,会先进行简单的预检查,本小节简单介绍预检查的内容及失败时的修复方式。
预检查项说明
源库连接性检查
检查内容
这个检查项主要检查数据传输服务器同源RDS实例的连接性。数据传输服务使用JDBC协议尝试连接源RDS实例,如果连接失败,那么这个检查项即检查失败。
失败原因
-
数据传输服务暂不支持源实例所在地区的RDS实例的实时同步。
- 源实例账号密码有误。
修复方法
提交工单,联系阿里云技术售后,协助解决。
目标库连接性检查
检查内容
这个检查项主要检查数据传输服务器同目标RDS实例的连通性。数据传输服务使用JDBC协议尝试连接目标RDS实例,如果连接失败,那么这个检查项即检查失败。
失败原因
-
数据传输服务暂不支持目标实例所在地区的RDS实例的实时同步。
- 目标实例账号密码有误。
修复方法
提交工单,联系阿里云技术售后,协助解决。
源库版本检查
检查内容
这个检查项主要检查:
-
源RDS实例的版本号,实时同步功能是否支持。
- 目标RDS实例的版本号是否高等于源RDS实例的版本。
失败原因
-
源RDS实例的版本低于数据传输服务支持的版本,实时同步暂时只支持MySQL5.1、5.5、5.6 三个版本。
- 目标RDS实例版本低于源RDS实例版本。
修复方法
-
如果源RDS版本过低,那么请首先到RDS控制台,将源RDS升级到5.6版本后,重新创建同步链路。
- 如果是目标RDS实例版本低于源RDS实例,那么请先到RDS控制台,将目标RDS实例升级到5.6版本后,重新创建同步链路 。
数据库存在性检查
检查内容
这个检查项主要检查同步DB,在目标库是否已经存在。如果同步DB在目标库不存在,那么数据传输服务会自动创建,但是在如下情况下,自动创建DB会出现失败,此时这个检查项还是会提示检查失败。
-
数据库名中含有小写字母、数字、下划线、中划线的其他特殊字符。
- 数据库的字符集不为utf8、gbk、latin1、utf8mb4中的一种。
目标库迁移账号无同步库的读写权限。
当源为RDS实例时,这个检查项不会失败。
源库权限检查
检查内容
这个检查项主要检查源库同步账号的权限是否满足要求。当权限不满足要求时,这个检查项会失败。当源为RDS实例时,这个检查项不会出现失败。
目标库权限检查
检查内容
这个检查项主要检查目标库同步账号的权限是否满足要求,当权限不满足时,这个检查项会失败
失败原因
-
数据传输服务自动在目标RDS实例创建账号失败。
- 数据传输服务对目标RDS实例的同步账号进行读写权限授权失败。
修复方法
提交工单,联系技术同学协助处理。
同名对象存在性检查
检查内容
这个检查项只有选择了同步初始化的同步链路时会进行检查,它主要检查目标RDS实例中是否已经存在跟同步对象同名的对象。
失败原因
当目标RDS实例中已经存在跟同步对象相同名称的对象时,这个检查项会失败。
修复方法
-
先将目标库中跟同步对象相同名称的对象删除掉。
- 重新创建同步链路,同步初始化选择: 结构初始化+全量数据初始化。
源库server_id检查
检查内容
这个检查主要检查源数据库的server_id 是否设置为大等于2的整数。如果源为RDS实例,那么这个检查项不会失败。
源库binlog是否开启检查
检查内容
这个检查项主要检查源数据库是否开启binlog日志。如果检查项失败,那么说明源数据库没有开启binlog。当源为RDS实例时,那么这个检查项不会失败。
源库binlog模式检查
检查内容
这个检查项主要检查源数据库的binlog模式是否为ROW。如果检查失败,那么说明源数据库的binlog格式不为ROW。 当源为RDS实例时,这个检查项不会失败。
约束完整性检查
检查内容
这个检查项主要检查同步的对象列表中,有外键依赖关系的父子表是否都被同步,防止破坏外键约束完整性。
失败原因
当同步的对象中,有部分对象为外键依赖的子表,但是它对应的父表没有同步,破坏了外键约束完整性。
修复方法
对于这种情况,有如下三种修复方式:
-
不进行约束完整性检查失败的子表的同步,重新创建同步作业,不进行这些约束完整性检查失败的子表的同步。
- 进行约束完整性检查失败的子表对应的父表的同步,重新创建同步作业,将这些约束完整性检查失败的子表对应的父表添加到同步列表中。
- 删除约束完整性检查失败的子表的外键依赖,修改源数据库将这些子表的外键依赖删除掉,重新创建同步作业。
存储引擎检查
检查内容
这个检查项主要检查同步的对象中,是否存在实时同步不支持的存储引擎。如federated, mrg_myisam,tokudb。
失败原因
当同步对象中,有表的存储引擎为federated, mrg_myisam或tokudb时,这个检查项会失败。
修复方法
先将不支持存储引擎的表的存储引擎修改为Innodb后,重新创建同步作业。
字符集检查
检查内容
这个检查项主要检查同步的对象中,是否存在实时同步不支持的字符集,例如ucs2。
失败原因
当同步对象的字符集为不支持的字符集时,这个检查项会失败。
修复方法
先将不支持字符集的表的字符集修改为utf8、gbk、latin1 中的一种后,重新创建同步作业。
复杂拓扑存在性检查
检查内容
这个检查项主要检查同步作业的源跟目标RDS实例上是否存在不支持的同步架构。目前实时同步只能支持:
1对1
1对多
两种架构,对于多对1,级联,双向等同步架构暂不支持。
失败原因
-
源RDS实例上已经存在同步作业,且其为同步作业的目标实例。
- 目标RDS实例上已经存在同步作业。
- 源跟目标RDS存在正在运行的迁移任务,且这个迁移任务迁移的对象跟要创建的同步作业重叠。
修复方法
-
如果源跟目标RDS实例同已存在同步作业相同,创建新同步作业是为了同步新的对象,那么直接修改已经存在的同步链路,修改同步对象,将要添加对象添加进去即可。
- 如果这个同步链路同已经存在的迁移任务冲突,那么必须等迁移任务完成后,才能重新创建同步作业。
- 如果新建同步作业会跟老的同步作业构成:级联架构或双向同步或多对1架构,那么暂不支持。
MySQL老密码格式检查
检查内容
这个检查项,主要检查源实例使用的密码是否为old password。 当源为RDS实例时,这个检查项不会失败。