问题描述
如果一个表为单副本表(虽然这并并不推荐,一般推荐为3副本以保证tablet的高可用),此时用户忽略了这个问题,对be进行了下线的操作:
MySQL> alter system drop backend "be_host:be_heartbeat_service_port";
此时会导致查询时,报找不到tablet的错误:

10063这个tablet在相应的be被drop掉之后造成副本缺失。此时如果下线的机器上数据仍然存在的话是可以恢复的。当然,如果机器下线后数据被删除了,那就只能重新导入数据了。
恢复方法
在已下线的be的storage_root_path配置的目录中找到10063对应的存储目录:
$ ls $storage_root_path/data/*/ | grep 10063
假设路径为:$storage_root_path/data/0/10063/81944231/
获取对应的元数据:
$ export STARROCKS_HOME=[path]
$ export LD_LIBRARY_PATH=$STARROCKS_HOME/lib/jvm/amd64/server:$STARROCKS_HOME/lib/jvm/amd64:$LD_LIBRARY_PATH
$./lib/meta_tool --operation=get_meta --root_path=hdfs/d7/dorisdb/data --tablet_id=10063 --schema_hash=8

本文介绍了在StarRocks中如何恢复单副本表的故障。当用户错误地对BE节点进行下线操作导致副本缺失时,如果数据未被删除,可以将下线机器的数据目录复制到集群其他节点恢复。恢复过程包括复制存储目录和元数据,然后在新节点上执行恢复命令。然而,单副本存在恢复风险,推荐创建3副本以保证高可用。下线BE节点时,推荐使用DECOMMISSION而非DROP。
最低0.47元/天 解锁文章
268

被折叠的 条评论
为什么被折叠?



