Dm任务 如何跳过 table structure compatibility check 啊?

为提高效率,提问时请尽量提供详细背景信息,问题描述清晰可优先响应。以下信息点请尽量提供:

  • 系统版本 & kernel 版本:centos 7
  • TiDB 版本:2.1.15
  • 磁盘型号:
  • 集群节点分布:
  • 数据量 & region 数量 & 副本数:
  • 集群 QPS、.999-Duration、读写比例:
  • 问题描述(我做了什么):

上游一些DDL语句,TiDB不兼容,所以需要手动改表,不影响上游的DML 的重放。

使用DM,遇到这种手动改造的表,就会发现:table structure compatibility check ,状态fail。

如何跳过这项检测?类似这样:ignore-checking-items: [“dump_privilege”, “replication_privilege”]

建议在 task 中设置 event 进行过滤,可以参照下述文档:

https://pingcap.com/docs-cn/v3.0/reference/tools/data-migration/features/overview/#参数配置

我已经过滤了相关的event。

但是,启动任务时,dm会自行判断线上和线下的表结构,如果不一致,则:table structure compatibility check 这一项为fail

dm 理论上在启动时不会主动的比较上下游的表结构,你使用的 DM 是什么版本?请描述下详细的信息:

1、这个报错是什么操作后出现的,比如是启动时,还是正常运行时出现了上述报错

2、请提供详细的报错日志

使用的版本:

Release Version: v1.0.0-alpha-83-gf6f0566

Git Commit Hash: f6f056642417f09e4c7f304e9f4fb4c5c58d2d5a

Git Branch: master

UTC Build Time: 2019-05-22 02:46:100:

Go Version: go version go1.12 linux/amd64

操作前:

mysql 表结构:
create table a (id int(11), a varchar , b varchar, FULLTEXT KEY test_k(a) )

经过DBA 操作:
先drop fulltext key, 再 ALTER TABLE a ADD FULLTEXT INDEX test_k_new (a, b ) WITH PARSER ngram;

线上mysql 表结构变为:
create table a (id int(11), a varchar , b varchar, FULLTEXT KEY test_k_new(a, b) )

因为TiDB 不支持指定两列为fulltext key,该ddl导致DM task暂停。

手动过滤,添加event filter之后。在DM dmctl中,update-task该任务时,结果报:table structure compatibility check 这一项为fail

要跳过的话配置的话这么写:ignore-checking-items: [“table_schema”] 不过看描述这个操作应该不在表结构的兼容性范围内的,table structure compatibility check fail 有 errorMsg 不?

1 个赞

高手:+1::+1:

该配置已经帮我解决了问题。

的确,这个表结构不再兼容范围内,tidb对全文索引支持不好。但其实这个索引不会影响MySQL → TiDB的DML 语句。

确实有errorMsg:说线上表结构无法解析。附上线上DDL 和 error。

DDL:

CREATE TABLE help ( id int(11) NOT NULL AUTO_INCREMENT, a varchar(1000) NOT NULL, b varchar(20) DEFAULT ‘center’, PRIMARY KEY (id), FULLTEXT KEY help (a,b) /*!50100 WITH PARSER ngram */ ) ENGINE=InnoDB AUTO_INCREMENT=224 DEFAULT CHARSET=utf8mb4

error:

---------- error options ----------
information: line 10 column 88 near “WITH PARSER ngram */
) ENGINE=InnoDB AUTO_INCREMENT=224 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC”

对线上DDL里面,特殊注释: /*!50100 WITH PARSER ngram */ 无法识别

但是,我们这边没关系,数据可以同步(不影响DML)过来就行

ignore-checking-items 文档有缺失,需要补充一下。 另外这个报错看起来像是 parser 解析不了,这个我跟研发确认下。应该是这个场景不会被 table structure compatibility check 给 block 的。

1 个赞

分库分表合并同步 ignore-checking-items这项配置可以忽略非自增主键冲突吗,该如何配置,忽略非自增主键冲突

你的意识是忽略主键冲突,那不合理,主键只能有一个.

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。