DM工具磁盘空间满了后,resume-relay报错

  • 系统版本 & kernel 版本 】 Red Hat 4.8.5-16 Linux version 3.10.0-693.2.2.el7.x86_64

  • TiDB 版本 】 Release Version: 3.0.2

  • DM工具 版本 】 v1.0.0-alpha-66-g5d00b80-dev

  • 问题描述(我做了什么)

  1. 由于下游TiDB性能吃紧,昨天临时将DM中的所有任务都进行了pause-task操作;
  2. 下游TiDB恢复后,操作resume-task后发现relayStatus全是Paused,errors为: no space left on device
  3. 操作resume-relay,不同的worker出现2种错误: a. binlog truncated in the middle of event; consider out of disk space on master; b. log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master;
  4. 检查了上游mysql,binlog文件是齐全的
  5. 上游MySQL的max_allowed_packet值为:128M

请问该种情况下,应该如何恢复relay模块的,谢谢!

我在文档库中找到类似的问题,请问该方法是否可行?

relay 处理单元报错 event from * in * diff from passed-in event * 或同步任务中断并包含 get binlog error ERROR 1236 (HY000)、binlog checksum mismatch, data may be corrupted 等 binlog 获取或解析失败错误

升级到 v1.0.1 试试。 1.0 版本里对于未写完整的 relay log 会尝试自动修复

因为担心升级会引入新问题,最终是采用了以下方案:

  1. 停止dm-worker
  2. 删除了损坏的binlog文件,并且将relay.meta的pos置为4
  3. 启动dm-worker,此时任务会报错,提示binlog become smaller
  4. 等待损坏的binlog同步完成,resume-task

目前观察下来运行是正常的。

发现上游库binlog文件过大时也会导致dm task paused,报错msg:“binlog checksum mismatch, data may be corrupted”. 貌似offset记录不了binlog大文件的pos点信息