首批通过分布式安全可靠测评,为关键业务系统打造
目录权限问题导致租户恢复卡住
更新时间:2026-05-13 01:51
适用版本
OceanBase 数据库所有版本。
问题现象
通过 OCP 恢复租户过程中,恢复任务的状态长时间处于 “系统副本恢复中”。
问题原因
通过如下 SQL 查询租户副本的恢复状态。
obclient> select svr_ip, role, is_restore, count(*)
from __all_root_table as a,
(select value from __all_restore_info where name = 'tenant_id') as b
where a.tenant_id = b.value and a.tenant_id = 1012
group by role, is_restore, svr_ip
order by svr_ip, is_restore;

查询的结果和如下信息进行对比。
3.x 版本:
- 0,正常副本
- 1,逻辑恢复的副本
- 2,物理恢复需要恢复基线和转储的副本
- 3,正在数据裁剪的副本(3.x 特有的步骤)
- 4,等待 clog 回放的副本
- 5,正在回放 clog 的副本
- 6,等待 memtable 转储的副本
- 7,已经 memtable 转储完成的副本
- 8,正在设置 member list 的副本
role 的含义:
- 1,leader
- 2,follower
- 4,恢复中的 leader
发现如下几条信息:
- 一共有 384 个副本进行恢复。
- 有 60 个副本,看状态已经恢复成功。
- 剩余 324 个副本,恢复存在问题,处于"物理恢复需要恢复基线和转储的副本"。
通过如下 SQL 排查哪些副本在做“物理恢复需要恢复基线和转储的副本”。
obclient> select * from __all_rootservice_event_history
where event like "%restore%" order by gmt_create desc limit 10;

可以发现,很多副本处于副本恢复状态,没有错误码,随机选择一个,然后在其执行节点进行检索日志,如下所示。

继续使用 trace_id 过滤相关信息,发现关键日志如下。
observer.log.20221208124915:[2022-12-08 12:46:30.187445] WARN list_files (ob_storage_file.cpp:346) [24718][430][YB420A44267B-0005ED34237E1E23] [lt=7] [dc=0] fail to open dir(ret=-4009, dir_path="/idc2obbackup/IDC2_OBDB2/IDC2_OBDB2/1634176965/incarnation_1/1009/data/backup_set_110_full_20221207/backup_110", strerror_r(errno, errno_buf, sizeof(errno_buf))="Permission denied")
observer.log.20221208125413:[2022-12-08 12:51:30.200225] WARN [STORAGE] do_task (ob_partition_migrator.cpp:2916) [24718][430][YB420A44267B-0005ED34237E1E23] [lt=12] [dc=0] set first_error_code_(ret=-4009)
由此可知,恢复任务一直卡在“系统副本恢复中”的原因在于目录权限问题:fail to open dir(ret=-4009),sizeof(errno_buf))="Permission denied" 。
解决方法
检查恢复目录和目录权限。若节点上恢复目录不存在或没有挂恢复盘,将对应恢复文件或恢复盘挂载,若恢复目录权限不正确,修改为对应用户权限。