DM同步任务重复dump问题

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

  • 【TiDB 版本】: DM v1.0.6
  • 【问题描述】:分库分表场景下,有个同步任务需要全量+增量同步,但是启动任务后,一直会报错,并重新dump文件。还请帮忙看下这个问题,谢谢。
    相关日志:
    log.txt2 (21.1 KB)

同步任务配置
mydumpers:
mysql-replica-06.dump:
mydumper-path: bin/mydumper
threads: 8
chunk-filesize: 256
skip-tz-utc: true
extra-args: -r 10000 --no-locks

修改过上游mysql的以下参数,但是没有效果
set global net_read_timeout=600;

看下 mysql-server 是否重启,可以检查下其是否 oom。

可以将 thread 8 换成 thread 2 或者 4 ,降低并发度再试下、

找dba确认了,没有重启、也没有OOM。另外thread线程数2、4、8我都试过,一直会重新dump。
其他表也有5、6千万的数据量,但是没有这种问题,这个表的数据量大概在9000万,数据量其实也差的不是很远,但现在一直没成功。还请帮忙看看是否有解决方法。

dmesg -T | grep mysql-server 的信息实锤下。
这边从日志看到,dumpling 在 dump 数据时,出现


所以需要看下。mysql 的状态。

看起来是没有重启过的
image

看日志其实也是一直在重复报错的。很纠结……

Telnet 下能连接到 mysql 吗。再看下 mysql log 看是否有连接的报错?

反馈下 max_allowed_packet 在 mysql 中的参数设置。

连接是可以的,参数如下:
image

mysql参数
image

辛苦使用 dumpling 执行下备份语句。

参数配置在 log 中又体现,需要写下格式。

[2020/09/04 08:37:39.668 +08:00] [INFO] [mydumper.go:284] ["create mydumper"] [task=broker_client_history] [unit=dump] [argument="[--host,10.71.64.60,--port,3306,--user,bigdata_ro,--outputdir,./dumped_data.broker_client_history,--logfile,/dev/stderr,--verbose,3,--threads,8,--chunk-filesize,256,--skip-tz-utc,-r,10000,--no-locks,--tables-list,hdb_broker_7.broker_client_history,hdb_broker_9.broker_client_history,hdb_broker_15.broker_client_history,hdb_broker_17.broker_client_history,hdb_broker_5.broker_client_history,hdb_broker_11.broker_client_history,hdb_broker_3.broker_client_history,hdb_broker_31.broker_client_history,hdb_broker_29.broker_client_history,hdb_broker_13.broker_client_history,hdb_broker_19.broker_client_history,hdb_broker_25.broker_client_history,hdb_broker_27.broker_client_history,hdb_broker_1.broker_client_history,hdb_broker_21.broker_client_history,hdb_broker_23.broker_client_history]"]

是想看看mydumper、dumpling 工具是否有一样的现象吗?dumpling 没用过,我先看看文档

啊, sorry,用 mudumper 试下

数据库分了几十个库,奇数库在一个mysql上、偶数库在另外一个mysql上。通过mydumper的方式进行导数,偶数库可以正常导完,基数库有一个库导数失败,单独去导这个库,也还是会失败。

然后通过重启task,但基数库、偶数库都会失败。

select * from hdb_broker_13.broker_client_history limit 10;
看下能正确返回吗

能的
image
总量:
image

看下 mudumper 执行的服务器,message 中是否有 mydumper 相关的 log 呢?

dm集群的话,只看到昨天有OOM的情况,但现在看也还一直在重复dump
[Mon Sep 7 08:23:25 2020] Out of memory: Kill process 2586 (dm-worker) score 933 or sacrifice child
[Mon Sep 7 08:23:25 2020] Killed process 2586 (dm-worker), UID 1000, total-vm:17231320kB, anon-rss:15265536kB, file-rss:0kB
, shmem-rss:0kB
[Mon Sep 7 08:23:25 2020] dm-worker invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=0
[Mon Sep 7 08:23:25 2020] dm-worker cpuset=/ mems_allowed=0
[Mon Sep 7 08:23:25 2020] CPU: 4 PID: 77491 Comm: dm-worker Kdump: loaded Not tainted 3.10.0-1062.el7.x86_64 #1
[Mon Sep 7 08:23:25 2020] Hardware name: Red Hat KVM, BIOS 1.11.0-2.el7 04/01/2014

在 mysql 中看下 timeout 的相关设置。
再检查下 network 情况,看下带宽是否使用率

如下:
image

image

现在问题是单独去导出 hdb_broker_13.broker_client_history 库的话,会失败,但实际上这个分库并没有比其他库大多少吧:thinking:

我建议尝试下 dumpling 导出这个库试试,语法跟 mydumper 类似。可以参考 https://github.com/pingcap/dumpling/blob/master/docs/cn/user-guide.md

每个库的数据量大概都在280多万,这个库也一样,早上dump这个库的数据,2次都是在260万的时候就异常了。
另外,就算用dumpling能成功,也没办法解决DM同步的问题吧?