首批通过分布式安全可靠测评,为关键业务系统打造
OBServer 使用对象存储备份时报:the format file does not exist under the destination 的原因及解决方法
更新时间:2025-06-23 08:21
问题现象
使用 COS 对象存储用来存储 OceanBase 数据库租户的日志归档,在执行设置 log_archive_dest 命令后提示 9080,the format file does not exist under the destination,无论首次开启日志归档或者修改日志日志归档,在目的端就应该不存在 format 文件,但是现在报这个文件不存在。
ALTER SYSTEM SET LOG_ARCHIVE_DEST='LOCATION=cos://db-backup-xxx/xxxx/oceanbase/clog?host=cos.xxx-xxx.myqcloud.com&access_id=xxxxx&access_key=yyyyyy&appid=xxxx&delete_mode=delete'

在 RS 节点,执行如下语句。
select svr_ip from oceanbase.dba_ob_servers where with_rootserver='yes';
通过关键词过滤 rootservice.log 日志信息。
grep "Yxxxx-xxxxx-xxxxx-xxxxx" rootservice.log
[2024-08-09 14:03:08.880025] WDIAG [SHARE] check_dest_validity (ob_backup_store.cpp:443) [21404][T1_L0_G0][T1][Yxxxx-xxxxx-xxxxx-xxxxx] [lt=20][errcode=-9080] format file does not exist(ret=-9080, backup_dest={root_path:"cos://db-backup-xxx/xxx/oceanbase/clog", storage_info:{endpoint:"host=cos.xxx-beijing.myqcloud.com", access_id:"access_id=xxx", extension:"appid=xxx&delete_mode=delete", type:"COS"}})

从代码的逻辑看要输出 443 行的 format file does not exist,说明备份的目的地是非空的,但是从 COS 对象存储 WEB 页面上查看 clog 归档的目的地是空的。

适用版本
OceanBase 数据库 V4.x 版本。
问题原因
用户使用 COS WEB 端先创建了 xxx/oceanbase/clog 目录,然后再设置归档路径。使用对象存储的客户端创建目录的原理是会创建一个特殊的 xxx/oceanbase/clog 对象,导致在后面设置归档路径时,检查出已经存在 xxx/oceanbase/clog 对象,误认为目录非空,然后报错。
解决方案
不要使用对象存储的客户端预先创建备份/归档的目录。
例如要将日志归档存放到 db-backup-xxx/xxxx/oceanbase/clog。
ALTER SYSTEM SET LOG_ARCHIVE_DEST='LOCATION=cos://db-backup-xxx/xxxx/oceanbase/clog?host=cos.xxx-xxx.myqcloud.com&access_id=xxxxx&access_key=yyyyyy&appid=xxxx&delete_mode=delete'
在对象存储里创建的目录可以是如下目录形式。
db-backup-xxx/xxxx/oceanbase
db-backup-xxx/xxxx
db-backup-xxx
注意
不能为:db-backup-xxx/xxxx/oceanbase/clog目录形式。