注意事项
为保证任务的正常运行,DRS提供了自动化的检查方法,在您启动DRS任务前,会针对源数据库和目标数据库的相关配置、条件进行检查。主要的检查项和对应的处理建议请参考预检查项。除了预检查项目之外,您还需要注意的事情参见表4。
表4 注意事项
类型名称 |
使用和操作限制 |
源数据库限制 |
- 不支持reset master或reset master to命令,可能会导致DRS任务失败或者数据不一致。
- 如果源数据库MySQL不支持TLS1.2协议,或者为版本较低的自建库(低于5.6.46或在5.7.0-5.7.28之间),需提交运维申请才能使用SSL测试连接。
|
使用限制 |
通用:
- 如果源数据库为RDS for MySQL,支持修改端口,修改之后同步任务失败,需要通过重试后继续进行同步。
- 如果源数据库为非RDS for MySQL,不支持修改端口。
- 不支持修改源和目标数据库的IP、账号和密码。
- 不允许源库执行清除Binlog的操作。
- 不允许源库进行恢复操作。
全量同步阶段:
- 任务启动和全量数据同步阶段,请不要在源数据库执行DDL操作,否则可能导致任务异常。
- DRS会向目标库PostgreSQL写入大量数据,会导致PostgreSQL的wal日志量急剧增长,PostgreSQL的磁盘有被写满的风险。可以通过在全量同步前关闭PostgreSQL的日志备份功能,减少wal日志的生产,同步完成后再将其打开的方式进行规避(具体操作方法可参考设置自动备份策略)。
注意:
关闭日志备份会影响数据库的灾备恢复,请根据实际情况谨慎选择。
增量同步阶段:
- 如果设置session变量character_set_client为binary,可能导致乱码。
- 支持部分DDL语句。
- 支持表字段的增删改,例如:
alter table `ddl_test` add column `c2` varchar(25);
alter table `ddl_test` modify column `c1` varchar(50);
alter table `ddl_test` alter c1 set default 'xxx';
- 支持修改表索引,例如:
alter table `ddl_test` drop primary key;
alter table `ddl_test` add primary key(id);
alter table `ddl_test` add index `ddl_test_uk`(id);
alter table `ddl_test` drop index `ddl_test_uk`;
- 表级同步支持增加列、修改列、增加主键和普通索引。
- 如果目标表不存在,则该DDL会被忽略掉。
- 不支持DROP_DATABASE、DROP_TABLE、TRUNCATE_TABLE、CREATE_VIEW、DROP_VIEW。
- 不支持使用Online DDL。
结束任务:
常见故障排查:
- 在任务创建、启动、全量同步、增量同步、结束等过程中,如有遇到问题,可先参考“故障排查”章节进行排查。
|
其他限制 |
- 由于MySQL中视图支持as select ... from a join b where ...等语法,PostgreSQL不支持,可能会导致视图同步失败。
- 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。
- 在MySQL中,同一个database(schema)下面的不同表可以存在相同的索引名或约束名。而目标数据库PostgreSQL中,同一个schema中索引和约束名是唯一的,且长度存在上限。为防止索引和约束名冲突,在全量同步中,DRS同步到目标表上的索引名称将变为此格式:哈希值+原索引名(可能被截断)+_key。其中哈希值由"原库名_原表名_原索引名"计算得到。同理,表上的原约束名将变为:哈希值+原约束名(可能被截断)+_key。
- 相互关联的数据对象要确保同时同步,避免因关联对象缺失,导致同步失败。常见的关联关系:视图引用表、视图引用视图等。
- 源库为RDS for MySQ L实例 时,不支持带有TDE特性并建立具有加密功能表。
- 在创建DRS任务之前,如果源或者目标数据库实例开启并设置了SQL限流规则,可能会导致DRS任务失败。
- 网络中断在30秒内恢复的,不影响实时同步,如果超过30秒,则会导致同步任务失败。
- 支持通过映射方式实现多个库对一个库的实时同步,且映射库之间不允许存在同名表。
- 索引同步不区分索引类型,同步到目标数据库都是btree索引。
- 在磁盘空间允许的情况下,建议源数据库Binlog保存时间越长越好,建议为3天,设置为0,可能会导致同步失败。
- 源数据库为自建MySQL时,通过设置expire_logs_days参数设置Binlog保留时间。建议将expire_logs_day参数设置在合理的范围,确保恢复时断点处的Binlog尚未过期,以保证任务中断后的顺利恢复。
- 源数据库为RDS for MySQL时,设置Binlog保留时间可参考设置RDS for MySQL本地Binlog日志清理。
- 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。
- 目标数据库多的列要求非空且没有默认值,源库insert数据,同步到目标数据库后多的列为null,不符合目标数据库要求。
- 目标数据库多的列设置固定默认值,且有唯一约束。源库insert多条数据后,同步到目标数据库后多的列为固定默认值,不符合目标数据库要求。
- 仅支持记录违反非空约束的异常数据、char类型或varchar类型超出字段长度限制的异常数据。
- 已选择的表与未选择的表之间互相rename的DDL操作,在任务同步中会被过滤掉,可能会导致任务失败或数据不一致。
- 对于一个DDL中存在一个rename的情况(例如:rename A TO B),只支持rename前后库表都在已选择库表中的rename操作(A和B都在已选择库表中),其他情况的rename DDL会被过滤。
- 对于一个DDL中存在多个rename的情况(例如:rename A TO B, B TO C),只支持rename前后库表都在已选择库表中的部分rename操作 ,其他情况的rename DDL会被过滤(A和B在已选择库表中,C不在,仅执行rename A TO B)。
- 不建议在多对一同步场景下的进行rename操作,可能会导致任务失败或数据不一致。
- 如果无主键表中包含大字段(blob、text、clob、nclob、bytea),增量同步阶段存在大字段数据不一致的可能性。
- 源数据库同步的表如果有AUTO_INCREMENT属性,结束任务时,DRS会自动刷新同步表的序列整型列所对应的PostgreSQL自增列(sequence)起始值,刷新值为该列的最大值+10000。
|