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

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

注意事项

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

表4 注意事项

类型名称

使用和操作限制

源数据库限制

  • 不支持reset master或reset master to命令,可能会导致DRS任务失败或者数据不一致。
  • 如果源数据库MySQL不支持TLS1.2协议,需提交运维申请才能使用SSL测试连接。

使用限制

通用:

  • 实时同步过程中,如果修改了源库或者目标库的用户名、密码,会导致同步任务失败,需要在 数据复制服务 控制台将上述信息重新修改正确,然后重试任务可继续进行实时同步。一般情况下不建议在同步过程中修改上述信息。
  • 为了保持数据一致性,不允许对正在同步中的目标数据库进行修改操作(包括但不限于DDL、DML操作)。

全量同步阶段:

  • 不支持DDL操作。
  • 对MyISAM表执行修改操作时,可能造成数据不一致。

增量同步阶段:

  • 如果设置session变量character_set_client为binary,可能导致乱码。
  • 支持部分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类型。
    • 增量同步支持表的重命名,源表和目标表必须都在对象选择里。
  • 已选择的表与未选择的表之间互相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操作,可能会导致任务失败或数据不一致。
  • 表级同步时,增量同步过程支持使用Online DDL,可参考DRS实时同步支持使用Online DDL工具吗
  • 支持任务再编辑追加同步对象。

常见故障排查:

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

其他限制

  • 对于目标库MariaDB的系统参数enforce_storage_engine,如果该参数值为InnoDB,那么DRS不支持同步存储引擎为MyISAM的表结构和数据到目标库MariaDB。如果需要同步存储引擎为MyISAM的表数据,请先在目标创建好表结构(由于enforce_storage_engine参数限制,存储引擎只能为InnoDB)。
  • 如果专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。
  • 对于源数据库和目标数据库的版本有差异的同步链路,由于不同版本之间的部分特性差异,可能会出现语法兼容性问题,详情可参考MySQL或MariaDB不同版本之间的语法差异
  • 对于表中的物理生成列,如果列是根据一个时间类型生成的,会存在此列数据不一致的可能性。
  • 进行表级多对一同步时,源库不允许存在无主键表。
  • 源库如果存在非标浮点类型,且非标浮点类型存在宽松模式可以写入但严格模式下无法写入的数据,同步过程可能会有数据不一致的风险。
  • 在创建DRS任务之前,如果源数据库实例开启并设置了SQL限流规则,可能会导致DRS任务失败。
  • 支持断点续传功能,但是对于无主键的表可能会出现重复插入数据的情况。
  • 支持目标数据库中的表比源数据库多列场景,但是需要避免以下场景可能导致的任务失败。
    • 目标数据库多的列要求非空且没有默认值,源数据库insert数据,同步到目标数据库后多的列为null,不符合目标数据库要求。
    • 目标数据库多的列设置固定默认值,且有唯一约束。源库insert多条数据后,同步到目标数据库后多的列为固定默认值,不符合目标数据库要求。
  • 不支持源数据库恢复到之前时间点的操作(PITR)。
  • 不支持目标数据库恢复到全量同步时间段范围内的PITR操作。
  • 不支持外键级联操作。当外键是普通索引的时候,可能会导致表结构创建失败,建议改成唯一索引。
  • 不支持强制清理binlog,否则会导致同步任务失败。
  • 不支持分区表的分区字段进行列映射。
  • 任务创建后,目标库不能设置为只读。
  • 表级同步中,对于多对一场景下的表在数据加工页面设置了附加列为来源列,如果目标库中已经存在多对一映射之后的表,请在目标库中删除这张表或者清除这张表的数据,否则将不会通过附加列来创建联合主键(这在同步过程中会导致数据冲突并忽略,从而到导致数据不一致)
  • 源库MySQL版本为8.0时,部分排序字符集(utf8mb4_0900_as_ci、utf8mb4_0900_as_cs、utf8mb4_0900_bin、utf8mb4_cs_0900_ai_ci等支持Unicode 9.0的排序字符集),在目标库不支持。
  • 由于引擎和版本差异,部分MySQL中的函数在MariaDB中不支持,不支持的函数有:MBRCOVEREDBY、ST_BUFFER_STRATEGY、ST_GeoHash、ST_IsValid、ST_LatFromGeoHash、ST_LongFromGeoHash、ST_PointFromGeoHash、ST_SIMPLIFY、ST_VALIDATE、 (8.0)JSON_ARRAYAGG、JSON_OBJECTAGG、JSON_PRETTY、JSON_STORAGE_FREE、JSON_STORAGE_SIZE、JSON_TABLE。
  • 目标数据库MariaDB执行分区交换的时候不支持VALIDATION语法验证,在源数据库MySQL执行分区交换SQL的时候不要带校验语法,例如:
    ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2 WITH VALIDATION;
  • 增量过程中请不要在源库MySQL的json类型中写入\n、\t、\r等字符,否则会导致数据不一致。
  • 需要DRS任务同步索引的情况下,目标库对应表上不能存在同名但不同列信息的索引。全量阶段DRS会忽略对应表上已存在的同名索引,增量阶段DDL根据索引名操作索引时会触发错位问题。
support.huaweicloud.com/realtimesyn-drs/drs_04_0523.html