数据复制服务 DRS-将MariaDB同步到MySQL:注意事项

时间:2024-06-24 11:40:39

注意事项

为保证任务的正常运行,DRS提供了自动化的检查方法,在您启动DRS任务前,会针对源数据库和目标数据库的相关配置、条件进行检查。主要的检查项和对应的处理建议请参考预检查项。除了预检查项目之外,您还需要注意的事情参见表4

表4 注意事项

类型名称

使用和操作限制

源数据库限制

  • 不支持reset master或reset master to命令,可能会导致DRS任务失败或者数据不一致。
  • 源数据库不允许存在与目标库同名的无主键表。
  • 如果源数据库MariaDB不支持TLS1.2协议,需提交运维申请才能使用SSL测试连接。

使用限制

通用:

  • 请勿修改源库和目标库的端口号,请勿修改、删除源库和目标库连接用户的密码、权限,否则可能导致任务失败。
  • 请勿在目标库做写入操作,否则可能导致数据不一致。

全量同步阶段:

  • 请勿在源库执行任何DDL,否则可能导致数据不一致或任务失败。
  • 全量同步过程中,对MyISAM表执行修改操作时,可能造成数据不一致。

增量同步阶段:

  • 增量同步过程中支持部分DDL操作。
    • 一对一的场景下,默认同步的DDL类型有CREATE_TABLE,RENAME_TABLE,ADD_COLUMN,MODIFY_COLUMN,CHANGE_COLUMN,DROP_COLUMN,DROP_INDEX,ADD_INDEX,CREATE_INDEX,RENAME_INDEX,DROP_TABLE,TRUNCATE_TABLE,DROP_PARTITION,RENAME_COLUMN,DROP_PRIMARY_KEY,ADD_PRIMARY_KEY,客户可以根据自身需求,在对象选择页面选择需要同步的DDL类型。
    • 增量同步支持表的重命名,源表和目标表必须都在对象选择里。
  • 增量同步支持任务再编辑追加同步对象。
  • 表级同步时,增量同步过程支持使用Online DDL,可参考DRS实时同步支持使用Online DDL工具吗

同步对比阶段:

  • 建议在源库的业务低峰期进行数据比对,防止误报不一致数据,以及减少对源库和DRS任务的冲击。
  • 在增量同步过程中做对比时,源库如果存在写入,则对比结果可能不一致。
  • 不支持在全量同步过程中做对比。
  • 不支持数据对比过程中做限速。

常见故障排查:

  • 在任务创建、启动、全量同步、增量同步、结束等过程中,如有遇到问题,可先参考“故障排查”章节进行排查。

其他限制

  • 已选择的表与未选择的表之间互相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操作,可能会导致任务失败或数据不一致。
  • 如果专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。
  • 对于源数据库和目标数据库的版本有差异的同步链路,由于不同版本之间的部分特性差异,可能会出现语法兼容性问题,详情可参考MySQL或MariaDB不同版本之间的语法差异
  • 对于表中的物理生成列,如果列是根据一个时间类型生成的,会存在此列数据不一致的可能性。
  • 进行表级多对一同步时,源库不允许存在无主键表。
  • 当源数据库不存在视图,但是存在和视图同名的表结构时,请不要在源端执行对应的drop view if exists的SQL语句,否则会导致任务失败。这是因为在MariaDB中执行drop view if exists的时候,如果对应视图不存在,但是存在和视图名同名的表,该操作不会报异常,同时还会产生Binlog记录。同步到目标库时,MySQL在同样情况下执行drop view if exists时,会报is not view的异常,导致任务失败。
  • 源库如果存在非标浮点类型,且非标浮点类型存在宽松模式可以写入但严格模式下无法写入的数据,同步过程可能会有数据不一致的风险。
  • 在创建DRS任务之前,如果源数据库实例开启并设置了SQL限流规则,可能会导致DRS任务失败。
  • 支持断点续传功能,但是对于无主键的表可能会出现重复插入数据的情况。
  • 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。
    • 目标端多的列要求非空且没有默认值,源端insert数据,同步到目标端后多的列为null,不符合目标端要求。
    • 目标端多的列设置固定默认值,且有唯一约束。源端insert多条数据后,同步到目标端后多的列为固定默认值,不符合目标端要求。
  • 不支持源数据库恢复到之前时间点的操作(PITR)。
  • 不支持目标数据库恢复到全量同步时间段范围内的PITR操作。
  • 不支持外键级联操作。当外键是普通索引的时候,可能会导致表结构创建失败,建议改成唯一索引。
  • 不支持强制清理binlog,否则会导致同步任务失败。
  • 不支持分区表的分区字段进行列映射。
  • 任务创建后,目标库不能设置为只读。
  • 多对一表级同步场景下,在“数据加工”页面设置了附加列为来源列,如果目标库中已经存在多对一映射之后的表,请在目标库中删除这张表或者清除表的数据,否则将不会通过附加列来创建联合主键并且在同步过程中会因为数据冲突并忽略,而导致数据不一致。
  • 需要DRS任务同步索引的情况下,目标库对应表上不能存在同名但不同列信息的索引。全量阶段DRS会忽略对应表上已存在的同名索引,增量阶段DDL根据索引名操作索引时会触发错位问题。
support.huaweicloud.com/realtimesyn-drs/drs_04_0517.html