liuxinwang / go-mysql-starrocks

mysql to starrocks|doris sync
GNU General Public License v2.0
24 stars 7 forks source link

[error] binlogsyncer.go:689 io.CopyN failed. err unexpected EOF, copied 0, expected 417: connection was bad #25

Closed running-db closed 9 months ago

running-db commented 9 months ago

新增全量同步,同步完成后,新出现了一个以上错误。而且每次都出现了。重试几次了。 完整错误:前后两个error,都会一起出现 [2024/02/04 14:56:34] [info] api.go:161 resume output write [2024/02/04 14:56:34] [error] binlogsyncer.go:689 io.CopyN failed. err unexpected EOF, copied 0, expected 1442: connection was bad [2024/02/04 14:56:35] [info] binlogsyncer.go:614 begin to re-sync from 0bb4dd22-35d1-11eb-8cf4-00155d011502:1-4690822702 (last read GTID=0bb4dd22-35d1-11eb-8cf4-00155d011502:1-4690822703) [2024/02/04 14:56:35] [error] binlogsyncer.go:875 kill connection 3470732 error ERROR 1094 (HY000): Unknown thread id: 3470732 [2024/02/04 14:56:35] [info] binlogsyncer.go:881 kill last connection id 3470732 [2024/02/04 14:56:35] [info] binlogsyncer.go:808 rotate to (binlog.021163, 4)

liuxinwang commented 9 months ago

这个是因为全量数据同步时间较长,导致源端binlog线程断开,看日志会进行重试再次创建binlog连接,现在同步应该没受影响吧。

running-db commented 9 months ago

其实很短,只有几分钟。我找到之前为啥导入那么慢的原因了,是因为我调整了建表参数,把表分区,并且增加了buckets,导致每次导入完成不了报错。后面我直接创建普通表,减小buckets数,就没有中途断开,每秒能有1万左右,达到了批次限制。

这个错误导入的表数据量只有130多万,相当于2-3分钟就完成了,但是每次就有这个错

liuxinwang commented 9 months ago

正常这么快不应该有这个问题,mysql参数有调整吗?这个应该是一个warn,我试试能不能重现

liuxinwang commented 9 months ago

测试了下是有这个问题,但是数据应该不会丢失,因为会自动进行retry,目前的问题是源端暂停binlog解析导致master给slave发送log timeout,对应mysql的参数:net_write_timeout(default:60s)

优化方式有两种:

  1. mysql建立连接时配置session级别net_write_timeout参数
  2. 优化全量同步逻辑,实现表级别全量+增量,避免堵塞已有的同步任务
running-db commented 9 months ago

好的,感谢,以前可能没注意这个问题,就注意全量同步报错去了。当前这个net_write_timeout默认的60s