适用版本
OceanBase 数据库 V3.x 版本。
问题现象
取消备份,备份任务停不下来,一直是 CANCEL 状态。
obclient> alter system cancel backup;
查询表 __all_virtual_sys_task_status 发现有任务执行。通过如下命令把旧的 task 任务取消后,新的任务又来了。
obclient> alter system cancel task 'task_id';
问题原因
由于备份任务已经发送给 RS 队列了,当取消备份任务时,已经存在于 RS 队列的 task 任务无法取消;通过 RS 切主后,RS 需要读取当前系统状态来重建队列,这时备份已经被 cancel 取消,因此不会再创建备份 task。
解决办法
确认是不是备份介质卡住问题。
先确认是不是备份介质 hung 住问题,如果是备份介质卡住,可以参考文档 备份的 NFS 卡住导致无法备份和停止备份。
如果不是备份介质的问题,则参考步骤 2。
如果确认是备份介质卡住的问题,执行第3步或者第4步(依赖是否有 force cancel 功能)。
执行
alter system cancel backup,等待任务退出。如果任务状态持续不退出。
查看 observer 处备份任务的状态,选择所有状态为 BACKUP 的 task,对其 trace_id 执行 cancel。
select task_id from __all_virtual_sys_task_status where comment like '%backup%';
对于每一个 task_id,执行如下命令。
alter system cancel task 'YB420B91EDF3-0005E9DC9B0C732B' alter system cancel task 'YB420BFFA10A-0005EA4E4DEB0B3A' alter system cancel task 'YB420BFFA10A-0005EA4E4DEB0B3B' alter system cancel task 'YB420BFFA10A-0005EA4E4DEB0B3C'
确认是否备份介质慢的问题。
如果 cancel task 后
__all_virtual_sys_task_status的 is_cancel 状态已经为 1,但是任务还是没有 cancel 掉,需要考虑备份介质慢的问题。 可以通过 nfsiostat 或者 oss 的监控来判断速度。 如果没有这些监控的话,也可以通过grep slow的日志来粗略的估计慢的境况。具体日志情况如下:
如果确认存在备份介质慢的情况,对于已经在拷贝宏块的备份问题,需要等待拷贝完宏块才能退出。
如果 cancel 后依旧无法退出。
如果没有备份介质慢的问题,等待了 10 分钟后还未退出的,需要联系技术支持。
执行 alter system cancel all backup force
如果是备份介质卡住,在有 force cancel 功能版本的 observer,执行以下操作:
alter system cancel all backup force;force cancel 功能支持的版本如下:
企业版
V2.2.77 BP7 及以上
V3.1.2 BP3 及以上
V3.2.0 BP1 及以上
社区版
- V3.1.3 CE 及以上
更改备份目录权限。
在没有 force cancel 功能的情况下,可以将备份目录权限改为 root 来触发退出。
注意
此处修改 root 权限时需注意,权限不能为 777,否则普通用户还是拥有权限执行,导致出现无法退出问题。
