dm配置文件中几个参数具体含义求解

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【版本】:tidb是3.0.3,dm是1.0.1和1.0.3
  • 【问题】:dm同步时配置文件中有几个配置参数含义和运行影响不太清楚,查了一下官方文档,也没找到详细的说明,求解答

参数1:remove-meta

现象:最开始时配置其值默认为true ,发现几个任务时不时会自动重新dump数据,然后load数据。后来修改参数值为false,暂时就再没发现任务异常了 。

问题:请问remove-meta参数分别设置为true和false时,dm任务的处理流程分别是什么? 对上游db,和下游tidb的影响和表现分别是什么呢?

参数2:is-sharding: true 和 ignore-checking-items: [“auto_increment_ID”]

问题:如果上游是多个实例的分库分表,下游是tidb的一个合表,那么这2个参数是要同时配置的吗? 此处的"auto_increment_ID"值设置后,dm任务会自动去各个分表的表结构文件里过滤匹配含有auto_increment属性的id列吗? 我们有些业务表的主键自增字段列名称不是id,而是pid、cid等等,那么auto_increment_ID是个固定值吗?文档上提到该参数的目的是:让 DM 关闭对自增 ID 冲突的检测,那么当2个分表里出现重复的自增id时,任务会忽略冲突吗,还是会报错暂定呢?

参数3: safe-mode: true 问题:文档里提到会把syncers阶段的insert操作转换为replace into操作。请问该参数主要是要解决什么问题呢?如果下游的tidb表是只读从库没有写入场景,上游分库分表数据不会出现主键冲突的数据,那么还有设置该参数的必要吗?设置该参数后,对dm任务同步性能和速度有大的影响呢?如果dm任务不设置此参数,下游tidb表数据可能会出现什么问题呢?

谢谢 :pray::pray::pray:

1、remove-meta 表示是否在任务同步开始前强制移除该任务名对应的 checkpoint 等 meta 信息,包括 xxx_loader_checkpoint、xxx_syncer_checkpoint、xxx_onlineddl 等保存同步断点信息的记录,之后该任务会重新开始导入或同步,包括从上游 dump 数据并覆写没有清理的下游数据。正常同步时,设置为 false 即可;只有在需要重置整个数据同步任务时才应将该参数设置为 true,并在同步正常后改回 false,避免下次任务中断重启后再次重置同步任务。参数使用场景参考

2、is-sharding: true 和 ignore-checking-items: [“auto_increment_ID”] 不是要同时配置的,在分库分表合并同步任务时需要设置 is-sharding: true ,上游各个分表的表结构相同并包含自增列的情况下,同步到下游可能存在冲突报错(ERROR 1062 (23000): Duplicate entry ‘***’ for key ‘PRIMARY’),所以要提前对自增列检查,与具体的字段名称无关;如果能够保证上游各分表自增主键不存在冲突,可以设置 ignore-checking-items: [“auto_increment_ID”] ,如果出现重复的自增 id,同步仍然会报错。参考自增主键冲突处理

3、增量同步过程中,同步任务可能中断,为确保中断后从较早的断点重新开始同步时,同步过程可重入并恢复同步,safe-mode 是一种支持在表结构中存在主键或唯一索引的条件下可重复导入 DML 的模式,在任务启动的前 5 分钟会自动启动 safe mode;一般同步场景下不需要额外设置该参数,设置该参数会将 insert 转化为 replace,将 update 转化为 delete + replace,对同步速度有一定影响;dm 任务正常运行时不需要设置此参数,dm 保证数据同步到下游,只有在某些情况下同步报错且需要从较早 binlog 位置开始同步数据时,才需要设置,参考

谢谢大佬回复

对于is-sharding: true 和 ignore-checking-items: [“auto_increment_ID”] 两个参数

1: 如果dm配置任务中,有6个表是分库分表合表,另一个库里的一个表不分开不分表,一共7个表要同步到下游tidb中对应的2个库中,此时这2个参数该如何配置呢 ?

2: 当有一个上游分表自增主键可能存在冲突,其他几个分表自增主键不存在冲突的时候,ignore-checking-items参数该如何配置呢? 如果不配置可能会存在什么问题吗? 文档中有提到“使用联合主键”的方式修改下游tidb的表结构,那么此时ignore-checking-items参数是否要进行配置呢?

谢谢

  1. 配置好白名单之后,合表的配置为一个 rule , 不合表的配置为一个 rule

  2. 配置好 ignore-checking-items: [“auto_increment_ID”],需要有其他的唯一键来保证能更新行为正确。