这类问题我又碰上了一次。阿里云 OSS 上放着数据库全备,桶里配了 30 天转低频、60 天删除的生命周期规则,某次恢复时发现一个月前的备份全没了,控制台显示对象已被规则删除,本地也没有第二份。

第一反应是「桶没有开版本控制,删除后无法找回」,验证下来不成立。

这类报错背后常见的原因有几处,逐个排除就行。生命周期规则按前缀匹配,备份目录正好落在规则范围内;规则里配了过期删除,没有排除备份前缀;备份脚本只写 OSS,没有异地或本地副本。

先看生命周期规则命中了哪些前缀

aliyun oss lifecycle --bucket bak-prod get

给备份前缀单独加一条保留规则

aliyun oss lifecycle --bucket bak-prod set --rules rules.xml

然后开启版本控制防止误删

aliyun oss bucket-versioning --bucket bak-prod put enabled

末了备份脚本补一份本地副本

ossutil cp -r oss://bak-prod/db/ /data/bak/db/ --update

改完先别撤,确认这几项。新规则下备份对象在 90 天后仍然存在,生命周期模拟显示备份前缀不会过期,恢复演练能取到完整文件。

提醒一点。生命周期按对象最后修改时间计算,转低频不改变可读性,别把归档和删除配在同一天。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189