网络异常导致DM同步中断,重启后报错io.ReadFull(header) failed

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

  • 【TiDB 版本】:v3.0.11 DM v1.0.3
  • 【问题描述】:

dm同步报如下错误:

dm-worker日志如下:

然后我使用stop-task / start-task 重启任务,错误依旧存在,看状态是running,实际已经停止

我之前遇到过,应该是网络的问题

报错显示的是链接被重置:

1、请检查上游 MySQL 和下游 DM-Worker 的网络联通性,如通过 telnet 命令进行验证

2、请检查上下游 MySQL 和 DM 服务器直接是否有网络安全策略,存在链接回收的设置。

3、请检查其他链接超时回收的设置

4、请尝试重启 DM-Worker 后,尝试启动 task ,再观察下

网络可能是出现过抖动,但是目前telnet是正常的,今天也没有做过其它操作 重启dm-worker后,再开启task,出现新的错误:

反复重启过几次,都是这样的错误

重启dm-worker后,现在relay log已经开始继续写入了,但是同步任务还是启动不了,错误就是上面截图所示

1、请检查下 task 配置文件相关的设置:

2、如果方便请上传 task 的配置文件~

image

这个同步任务运行有一个多月了

请使用 mysqlbinlog -vv 解析下下述的 relaylog 看下是否有异常发生:

image

这是中断的binlog位点信息

对比了下源mysql binlog,中间没有漏掉信息,直接跳过了,现在已经恢复了

:+1:,请帮忙反馈下,这个环境的 relaylog 的 meta 文件是否手动的编辑修改过?

下次出现相应的报错,可以尝试下述步骤,避免数据丢失:

建议重新从上游拉取报错位置的 binlog 文件,并重新开始同步,参考步骤如下:

1)停止 task

2)停止 dm-worker

3)修改 relay-meta 文件为报错的 binlog 的内容,比如:报错时有 binlog-name = "mysql-bin.004451"binlog-pos = 2453 ,则将其分别更新为 binlog-name = "mysql-bin.004452"binlog-pos = 4 ,同时更新 GTID 的信息比如对应位点的 GTID 为 binlog-gtid = "f0e914ef-54cf-11e7-813d-6c92bf2fa791:1-138218058"

4)重启 dm-worker

5)将下游 dm_meta 数据库中 global checkpoint 与每个 table 的 checkpoint 中的 binlog_name 更新为出错的 binlog 文件,将 binlog_pos 更新为已同步过的一个合法的 position 值,比如 4。

6)修改 task 的 safe-mode 为 true,并启动 task

7)观察同步状态,报错的 binlog 同步完成后,可以修改 task 的 safe-mode 为 false,然后继续同步

relay log下的meta文件没有人为修改

好的,谢谢!

:handshake: