MP-AOF启动失败报错“Failed to open the manifest file”表明redis.aof.manifest缺失或损坏,该文件是Redis 7.0多文件AOF的元数据清单,记录base/incr分片类型、序号及加载顺序,启动时必须存在且格式正确,缺失则拒绝恢复。

MP-AOF启动失败时,redis-server 报错找不到 redis.aof.manifest
Redis 7.0 启用 MP-AOF 后,redis.aof.manifest 是核心元数据文件,它不存数据,但记录了当前所有 AOF 分片(如 appendonly.aof.1.base.rdb、appendonly.aof.2.incr.aof)的顺序、类型和校验信息。一旦缺失或损坏,Redis 启动会直接拒绝加载,报类似错误:
Failed to open the manifest file: No such file or directory
这不是配置没生效,而是 MP-AOF 机制强制依赖该文件——没有它,Redis 无法判断哪些分片有效、哪个是 base、哪些是 incr、是否已截断。此时不能靠“重启试试”解决,必须定位来源。
确认 MP-AOF 是否真正启用,别被 appendfilename 假象误导
appendfilename 在 MP-AOF 模式下只是占位符,它不再控制实际写入的文件名。你看到配置里写了 appendfilename "appendonly.aof",不代表真有这个文件;真正的分片命名由 Redis 内部管理,格式固定为 *.base.rdb 或 *.incr.aof。
- 检查
CONFIG GET aof-use-rdb-preamble:返回yes才表示混合持久化开启(即 MP-AOF 生效) - 检查
CONFIG GET aof-enabled:必须为yes,否则连 AOF 都没开 - 查看
dir目录下是否存在redis.aof.manifest,以及至少一个*.base.rdb文件 —— 缺一不可 - 如果只有
appendonly.aof单文件,说明 MP-AOF 根本没启用,可能是配置后没CONFIG REWRITE或未重载
清单文件丢失的三个高频原因与对应动作
清单文件本身极小(通常几百字节),但它是 MP-AOF 的“目录索引”,丢失后整个 AOF 链就断了。常见原因不是磁盘损坏,而是运维误操作或流程断裂:
-
手动清空
dir目录但忘了保留redis.aof.manifest:MP-AOF 不像传统 AOF 那样只靠单个文件恢复,清单文件必须和 base/innr 文件共存。删目录前务必先停 Redis,再整体备份 -
云环境磁盘快照/迁移时跳过了隐藏文件或小文件:某些备份工具默认忽略点开头文件或小于 1KB 的文件,
redis.aof.manifest正好踩中这个坑。检查备份脚本是否显式包含redis.aof.manifest -
AOF 重写过程中进程被 kill -9 强制终止:MP-AOF 重写(
BGREWRITEAOF)会先生成新 manifest + 新分片,再原子切换。若中途被杀,旧 manifest 可能被删,新 manifest 又没写完,导致双失
遇到这种情况,不要尝试手写 manifest —— 它含 CRC 校验和严格 JSON 结构,出一个字段就加载失败。优先从最近一次正常 shutdown 的备份中恢复该文件。
没有备份时,能否重建 redis.aof.manifest?
不能安全重建。Manifest 不是简单枚举文件名,它还包含每个分片的 file_seq、type、size 和 crc64。即使你手动凑出 JSON,Redis 启动时校验失败仍会拒绝加载。
唯一可行路径是降级回传统 AOF 模式:
- 临时关闭 MP-AOF:
CONFIG SET aof-use-rdb-preamble no - 确保
aof-enabled yes,并确认存在一个完整的appendonly.aof(或通过redis-check-aof --fix修复) - 重启 Redis,让它用单文件 AOF 恢复数据
- 待服务稳定后,再通过
CONFIG SET aof-use-rdb-preamble yes重新启用混合模式,触发新一轮重写生成新 manifest
注意:这会导致一次全量重写,期间内存占用升高,且重写完成前新增写入仍走旧 AOF 流程。真正关键的点在于——MP-AOF 的可靠性不取决于单个文件大小,而取决于 manifest 与所有分片的原子一致性。任何绕过它的“修复”都是在赌运气。


















