tidb在从5亿条的数据表查询中报错:maybe read truncated/dropped table data

  1. 参考这个命令,麻烦再查下key对应的当前 region id
    sql查询报数据截断 - #6,来自 15810785091
  2. 让 region transfer leader 到一个其他节点,再执行语句,看看是否还报错
    参考文档使用 pd-ctl 命令,tiup 可以使用 tiup ctl pd 的命令
    tiup ctl: pd -u http://pdleaderip:port -i
    https://docs.pingcap.com/zh/tidb/stable/pd-control#pd-control-使用说明
  3. 查看具体 store id,可以在pd-ctl 中执行 store 查看

@Hacker_yI2ff81G 请问操作了吗?是否能够解决?

正在按照您的方法 准备开始做相关操作,请稍等

other error: default not found: key:7480000000000000D45F72800000001A43E080, maybe read truncated/dropped table data?
报错的key是 7480000000000000D45F72800000001A43E080,

我执行这个命令
region key 7480000000000000D45F72800000001A43E080
{
“id”: 6,
“start_key”: “”,
“end_key”: “7480000000000000FF0500000000000000F8”,
“epoch”: {
“conf_ver”: 5,
“version”: 2
},
“peers”: [
{
“id”: 7,
“store_id”: 1
},
{
“id”: 46,
“store_id”: 4
},
{
“id”: 81,
“store_id”: 5
}
],
“leader”: {
“id”: 81,
“store_id”: 5
},
“written_bytes”: 0,
“read_bytes”: 3792,
“written_keys”: 0,
“read_keys”: 68,
“approximate_size”: 4,
“approximate_keys”: 7
}

然后执行这个命令
» region 7231696
{
“id”: 7231696,
“start_key”: “7480000000000000FFD45F72800000001AFF43E0800000000000FA”,
“end_key”: “7480000000000000FFD45F72800000001AFF4472670000000000FA”,
“epoch”: {
“conf_ver”: 5,
“version”: 13346
},
“peers”: [
{
“id”: 7231697,
“store_id”: 1
},
{
“id”: 7231698,
“store_id”: 4
},
{
“id”: 7231699,
“store_id”: 5
}
],
“leader”: {
“id”: 7231699,
“store_id”: 5
},
“written_bytes”: 0,
“read_bytes”: 0,
“written_keys”: 0,
“read_keys”: 0,
“approximate_size”: 55,
“approximate_keys”: 107161
}

然后又执行这个命令
» operator add transfer-leader 7231696 4
Success!

然后再看下key的store id
» region 7231696
{
“id”: 7231696,
“start_key”: “7480000000000000FFD45F72800000001AFF43E0800000000000FA”,
“end_key”: “7480000000000000FFD45F72800000001AFF4472670000000000FA”,
“epoch”: {
“conf_ver”: 5,
“version”: 13346
},
“peers”: [
{
“id”: 7231697,
“store_id”: 1
},
{
“id”: 7231698,
“store_id”: 4
},
{
“id”: 7231699,
“store_id”: 5
}
],
“leader”: {
“id”: 7231698,
“store_id”: 4
},
“written_bytes”: 0,
“read_bytes”: 0,
“written_keys”: 0,
“read_keys”: 0,
“approximate_size”: 67,
“approximate_keys”: 81920
}

已经移动到storeid 是4上了

查询 依然报错
select * from douyin_video_base WHERE user_id=104761982553

1105 - other error: default not found: key:7480000000000000D45F72800000001A43E080, maybe read truncated/dropped table data?
时间: 4.079s

非常感谢,我们再分析下

我是不是把这个other error: default not found: key:7480000000000000D45F72800000001A43E080, maybe read truncated/dropped table data? 报错的主键id删除掉,是不是就不报这个错误了?

TiDB 删除一行时也需要把这一行读出来来保证 affected rows 准确,所以用 SQL 无法删除。一种恢复方法是用 tikv-ctl recover-mvcc 功能,它可以把不匹配的数据删掉,比如这里缺少 default 列的这一行。但这需要停机才能使用,为了减少影响可以这样操作:

  1. 找到那个 key 所在的 region 和 store。
  2. evict 其中一个 store 上的所有 leader,然后停掉该 store。
  3. 在停掉的 TiKV 上执行 tikv-ctl --db /path/to/tikv/db recover-mvcc -r {region_id} -p {pd_ip:port}
  4. 启动 TiKV 然后把 key 所在的 region leader 迁移到该 store 上。之后依次对其他 2 个 follower 做相同操作。
2 个赞
  1. @Hacker_yI2ff81G 可以参考上面的帖子试试解决。
  2. 之前的日志可能不够,能否麻烦您反馈下所有的 tikv.log 和 tidb.log 日志。(需要default value not found 第一次发生前3小时到后一小时的日志)
  3. 根据当前的日志看,第一次发生是 2021/05/26 23:00:06 吗?(那么就是需要 21:00 —24:00 的日志)
    [2021/05/26 23:00:06.078 +08:00] [ERROR] [mod.rs:307] [“default value not found”] [hint=load_da
    ta_from_default_cf] [key=7480000000000000D45F72800000001A43E080]
  4. 非常抱歉带来的不便,目前也是希望再引入 tidb 来分析,多谢。

这个操作好复杂,看来这块会有新的需求了…

你好,请问其他表的数据,或者这个表的其他行,是否有出现类似问题?

木有,这个帖子可以收藏了 :+1:

有人遇到此问题解决了吗? 楼主是否解决了 今天也遇到这个问题了

昨天找官方人 看了这个问题
原因:目前确认数据出错的问题是开启 enable-ttl 参数导致的,该参数只适用 rawkv api,咱是正常的 tidb 集群,使用该参数的影响参考:https://docs.pingcap.com/zh/tidb/stable/tikv-configuration-file#enable-ttl

风险:会导致数据损坏、TiDB 集群升级失败等严重后果

建议:由于该参数只能在集群初始化的时候设置,所以需要重构集群,并且该数据损坏的问题已经在 5.1.4 得到优化,可以使用该版本重构集群;同时暂停集群写入,将现有数据通过 csv 或 sql 方式以确保现有数据准确性,再使用 lightning 导入新构建的集群

1 个赞

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