DM 6.1.1开启relay-log后,start-task成功但是relay-log不落盘

【 TiDB 使用环境】生产
【 TiDB 版本】6.1.1
【遇到的问题】
dm-worker的relay-log时不时就会出现不落盘的情况,使用query-status看任务状态是正常,也可以正常同步。
【复现路径
没办法稳定复现,怀疑是跟task失败了多次,执行了多次resume-task有关
【问题现象及影响】


可以看到binlog在10-21已经没有继续落盘了,最后一个binlog为mysql-bin.001048。

这里看,任务状态是正常的,也已经同步到mysql-bin.001114了(下游有主键冲突,复制停止了一段时间,手动执行resume-task后修复,这个问题出现了多次,我也resume-task执行了多次)

补充一下,出现这种问题时候,可以看到relayStatus的状态确实为null,也就是relay-log其实是没有启动的。这个时候如果执行resume-relay,会提示你relay-log还没开启,所以需要先执行start-relay


但是这个时候,执行query-status,会发现task状态开始变失败了,必须先stop-taskstart-task来重新生成一个task。

可以通过 clinic 服务给我们传一下日志吗?需要日志来排查问题

https://docs.pingcap.com/zh/tidb/stable/clinic-data-instruction-for-tiup

找到问题原因了,刚才又排查了下,发现是所有的数据源都没开启relay-log。才想起来是之前操作时候,脑子一抽,统一对所有的数据源执行了stop-relay & stop-task的操作,之后只执行了start-task的操作,并没有执行start-relay的操作,所以本身就不会拉取relay-log :skull_and_crossbones:

另外附两个查询异常relay的数据源名称的SHELL命令

# 1. 查询没有开启relay-log的数据源
[tidb@prod-tiup-f01 task]$ tiup dmctl --master-addr 127.0.0.1:8261 query-status --more | jq -r '.sources[] | select(.sourceStatus.relayStatus == null) | .sourceStatus.source'
tiup is checking updates for component dmctl ...
Starting component `dmctl`: /home/tidb/.tiup/components/dmctl/v6.1.1/dmctl/dmctl --master-addr 127.0.0.1:8261 query-status --more

# 2. 查询处于错误状态的数据源都有哪些
[tidb@prod-tiup-f01 task]$ tiup dmctl --master-addr 127.0.0.1:8261 query-status --more | jq -r '.sources[] | select(.sourceStatus.relayStatus.stage == "Paused") | {src: .sourceStatus.source, worker: .sourceStatus.worker }'
tiup is checking updates for component dmctl ...
Starting component `dmctl`: /home/tidb/.tiup/components/dmctl/v6.1.1/dmctl/dmctl --master-addr 127.0.0.1:8261 query-status --more

另外:如果你跟我一样之前开启过relay-log,已经很长时间没有开启relay-log,这个时候直接start-relay大概率会出现错误:


这是因为dm-worker在start-relay时候会从上次暂停的时间点来向MySQL请求binlog,如果relay-log已经断了很长时间,大概率binlog已经被清理掉了(其实我们也不需要这些binlog的,毕竟task状态是正常的,这些binlog其实早被task给应用过了,只不过没落盘而已)。
这个时候,你可以根据上面我给的 命令2 来找到数据源对应的dm-worker,然后到DM的deploy目录,删除掉relay_log目录,清理之前遗留的元数据。然后stop-relay & start-relay重启下relay就可以了。

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。