unsafe remove-failed-stores 后,启动 tidb 节点失败,提示:Data is corrupted, missing data for NOT NULL ...

【 TiDB 使用环境】测试环境
【 TiDB 版本】v8.1.0

【复现路径】做过哪些操作出现的问题

使用 unsafe remove-failed-stores 强制删除 tikv 节点

【遇到的问题:问题现象及影响】

tidb 节点启动不了,错误日志:
[2024/11/26 14:56:03.738 +08:00] [FATAL] [terror.go:309] [“unexpected error”] [error=“[tikv:10000][components/tidb_query_executors/src/table_scan_executor.rs:425]: Data is corrupted, missing data for NOT NULL column (offset = 5)”] [stack=“github.com/pingcap/tidb/pkg/parser/terror.MustNil\n\t/workspace/source/tidb/pkg/parser/terror/terror.go:309\nmain.createStoreAndDomain\n\t/workspace/source/tidb/cmd/tidb-server/main.go:421\nmain.main\n\t/workspace/source/tidb/cmd/tidb-server/main.go:326\nruntime.main\n\t/usr/local/go/src/runtime/proc.go:267”] [stack=“github.com/pingcap/tidb/pkg/parser/terror.MustNil\n\t/workspace/source/tidb/pkg/parser/terror/terror.go:309\nmain.createStoreAndDomain\n\t/workspace/source/tidb/cmd/tidb-server/main.go:421\nmain.main\n\t/workspace/source/tidb/cmd/tidb-server/main.go:326\nruntime.main\n\t/usr/local/go/src/runtime/proc.go:267”]

  1. 检查 TiKV 节点状态
  • 确认被删除的 TiKV 节点是否确实存在问题,查看其日志以了解具体原因。
  1. 使用命令移除故障节点
  • 如果确定节点无法恢复,可以使用以下命令强制移除故障节点:
pd-ctl unsafe remove-failed-stores <store-id>  
  • <store-id> 是你要删除的 TiKV 节点的 ID。
  1. 重启 TiDB
  • 移除故障节点后,尝试重新启动 TiDB 实例,查看是否可以正常启动。
  1. 数据恢复
  • 如果数据丢失严重,可能需要考虑从备份中恢复数据。

注意事项

  • 使用 unsafe 命令会有数据丢失的风险,务必谨慎操作。
  • 建议在执行此类操作前备份重要数据。

表妹,我就是运行

unsafe remove-failed-stores <store-id>  

命令后,无法启动 tidb 实例,tikv 节点,pd 节点全部正常,就是 tidb 节点启动不了

看起是数据有损坏,unsafe remove-failed-stores 处理了几个 tikv node 了。

建议您采取以下步骤:

  • 检查 PD 调度状态:使用 PD Control 工具检查 PD 的调度状态,确认是否有 Region 处于不正常状态,例如 down_peer_region 状态。
  • 修复 SST 文件:如果存在损坏的 SST 文件,使用 tikv-ctl bad-ssts 命令检查并修复这些文件。
  • 手动删除副本:如果某些 Region 的副本状态不正确,可以使用 pd-ctl operator add remove-peer 命令手动删除 TiKV 中的副本。
  • 重启 TiKV 节点:在修复操作完成后,尝试重启 TiKV 节点,以确保所有更改生效。
  • 监控集群状态:在修复过程中,持续监控集群状态,确保所有操作都按预期进行

就一个

查看了一下,下面是 check 结果

empty-region 24892
oversized-region 1
undersized-region 24730

bad-ssts 命令运行有问题:

tiup ctl:v8.1.0 tikv bad-ssts --pd http://127.0.0.1:2379 --data-dir /home/tidb/tidb-data/tikv-20160

报错:
error: Found argument ‘–data-dir’ which wasn’t expected, or isn’t valid in this context

/home/tidb/tidb-data/tikv-20160 这个目录确实是我的 tikv 数据目录,tikv 节点也是正常运行的

三个 tikv 节点都没有 bad-ssts

start to print bad ssts; data_dir:/home/tidb/tidb-data/tikv-20162; db:/home/tidb/tidb-data/tikv-20162/db

corruption analysis has completed