dba-kit
(张天师)
1
【 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执行了多次)
dba-kit
(张天师)
2
补充一下,出现这种问题时候,可以看到relayStatus的状态确实为null,也就是relay-log其实是没有启动的。这个时候如果执行resume-relay
,会提示你relay-log还没开启,所以需要先执行start-relay
;
但是这个时候,执行
query-status
,会发现task状态开始变失败了,必须先
stop-task
再
start-task
来重新生成一个task。
lance6716
(Lance6716)
3
dba-kit
(张天师)
4
找到问题原因了,刚才又排查了下,发现是所有的数据源都没开启relay-log。才想起来是之前操作时候,脑子一抽,统一对所有的数据源执行了stop-relay
& stop-task
的操作,之后只执行了start-task
的操作,并没有执行start-relay
的操作,所以本身就不会拉取relay-log
dba-kit
(张天师)
5
另外附两个查询异常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就可以了。
system
(system)
关闭
6
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。