datax 同部tidb数据至mysql

利用 datax同步一张全量表的数据到mysql,数据量比较大,在千万级,同步了一段时间后,就报错
communications link failure


都是read端报错了,这个该怎么设置,网上看了跟wait_timeout有关,下图是相关参数
show variables like “%timeout%”

看看max_execution_time参数是否有限制。

可能是和连接池探活有关:
https://docs.pingcap.com/zh/tidb/stable/java-app-best-practices#连接池

show global variables 结果不一样,如下图

max_execution_time 这个参数,global 与 不加global查到的都一样
image

如果是这个问题,那datax,只能通过调大代理服务器的idle?

那不是设置max_execution_time的问题,wait_timeout设置了session级别的吧所以和全局的不一样,应该不是参数问题,wait_timeout只影响空闲超时时间。排查上楼上的情况吧,看看是不是和连接池探活有关。

datax连接tidb的配置贴出来看下

先调一下代理的空闲时间观察看看吧

TiDB log 在这个时间前后有报错吗 ?看一下?

我现在直接从tidb的真实节点同步数据,同步了30多分钟,120w条数据,未出现之前的 communications link failure的错误,但是出现read tidb 时 out of memory quota!的报错,请问如何设置一边读一边写,而不是全部读完再写?

tidb log由于现在还没有tidb节点的登录权限,因此暂时看不到,等申请下来了权限再重复测试验证一下。:handshake:

这个是因为超出默认的查询内存上限了,可以通过TiDB节点的这个参数调大:
image

另外,全部读完再写是啥意思,TiDB并没有对读写做限制,同时读写没问题的

这个参数我知道,那如果我的表数据量达到更大,只能继续通过调整该参数来实现全量数据同步吗,有没有别的更好的方式?
我的意思是,出现这个报错,是不是因为datax在tidb里面是先读取全表(只读一次),然后再分批次写入,如果能设置参数自动分批次读取,应该就可以避免这个问题吧?

你这两个问题和TiDB关系不大,是和DataX的处理机制有关,建议研究下DataX我对这个不是很熟,但是从经验上来看,这种ETL工具不会傻到把一张表的数据全部读完了再去往下游写吧

搜了下 DataX 的issue,一堆这样的

https://github.com/alibaba/DataX/issues/1272
https://github.com/alibaba/DataX/issues/940
https://github.com/alibaba/DataX/issues/502

一般就是下游的sink 速度不够,就会塞住
参考下

2 个赞

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