dm同步大量mysql表

我看正常能检出的时候也是报这个,worker log在check的时候没有任何日志

是我的文件有问题吗

check-task 是 master 在做,worker 没有 log 正常。或者您试一下增加一下 dumpers 设置里的 thread 数量试试?因为表结构的检查是并行的,并行度取决于这个配置。

这个参数如何修改,我是发现这个检查速度有时候很快,有时候就特别慢,我一共也就几十张表,就和假死了一样task_dw_batch2.yaml (4.0 KB)

mydumpers:
    global:
        - threads: 16

FYI: https://docs.pingcap.com/zh/tidb/stable/task-configuration-file-full

不过表这么少感觉不像是 DM 并行度低的问题。也许跟上游执行 SQL 语句的速度有关系

改了还是不行,应该不是这个问题


执行的时候就看到2个sleep的进程

表太少了,跟并发度确实不会有很大关系…不过这里的 log 太少了,也不太好定位问题呢:thinking:

我先去建个 issue 吧,这里可能需要更多的 log 才能排查(个人觉得是 SQL 执行的速度问题?)

如果是这样的话,减少表试试。估计是实际环境的处理能力限制了吞吐。

确实日志有点少,打印一行检查开始,然后就一直要到检查结束有个时长,具体执行的sql是什么呀,如果是sql应该也不会这么慢呀,只有几张表的时候就很快,多一点表就突然假死了

尝试帮您复现了一下:https://github.com/pingcap/tiflow/issues/5759 ,有兴趣的话您可以点进来看看具体原因

现有版本应该有一些问题。您可以检查一下:

  1. dumper threads 是否足够大
  2. 所有表的结构都满足约束(比如,TiDB 支持的 charset 和 collation,primary key 等)

如果实在绕不过去,也只能 ignore 掉这个检查项了

主键约束不是所有表都满足,这个理论上不会导致卡住吧,


这是我打开了mysql的历史纪录,发现只有check-task的一开始有记录,后面就没有进展了

我就是一次录了很多表,想让检查一下看看哪些表不满足,然后我去数据库处理下,或者单独dump

是的,不应该被卡住,所以是个 bug:sob:

分批量来 check 一下吧,check 完之后再把约束改好。

因为我们好多表都是从hive同步到的之前的mysql,一般只有hive的分区字段设置了一个普通索引(大部分表数据量不大),想问一下如果没有主键和唯一键是否可以绕过(全都改也挺麻烦的),如果绕过了会影响数据一致性吗

1)所谓的卡住是在什么阶段?
2)刚启动就卡住,那就是全量阶段?
3)如果表没有PK或者UK,启动任务的时候有warning的,这些表的同步就可能忽略?
4)如果是全量阶段卡住,是dm在校验表结构是否满足同步条件?上游mysql 有在执行什么语句吗?

1、执行check-task一开始,感觉就是1s后就不再有上游mysql查询行为,可以看我上面发的mysql的历史纪录,只有第一秒有查询表结构,后面就没有了;
2、是否可以让表没有PK或者UK也能同步,我们的这种报表数据很多都只有一个日期索引
现在的dm版本6.0.0,可以支持我说的第二种情况吗(让表没有PK或者UK也能同步)

这个有进展了吗,我可以通过升级解决吗

在 6.1 版本这个 bug 应该被修复了,可以尝试一下

FYI: https://github.com/pingcap/tiflow/pull/5774

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。