7.0 的 AOF 目录结构
7.0 起 AOF 从单个文件改成了目录结构:默认目录为 appendonlydir,其中包含一个 manifest 清单文件、若干 base 基线与 incr 增量文件。清单记录当前生效的文件列表与类型,加载时按清单顺序先读 base 再读 incr。重写不再重写那个不断变大的文件,而是生成新的 base 并切换清单指向,因此重写期间的磁盘峰值更低、切换动作也更简单,旧文件可以在切换完成后清理释放。
基本信息
| 目录 | appendonlydir,可用 appenddirname 改名 |
|---|---|
| 组成 | manifest 清单 + base 基线 + incr 增量 |
| base 格式 | 开启 aof-use-rdb-preamble 时为 RDB,否则为 AOF |
| 加载顺序 | 按清单依次读取 base 与 incr |
| 命名特点 | 文件名带类型与序号后缀,便于识别 |
典型使用场景
- 备份脚本适配:备份对象从单个文件变成整个目录
- 排查 AOF 加载失败:先核对清单与实际文件是否一一对应
- 迁移时手工搬文件:必须把清单与文件一起搬,缺一不可
- 磁盘容量评估:重写期间新旧 base 会同时存在
- 从 6.x 升级到 7.0 后修正运维脚本与备份清单
查看结构
查看结构
ls -l /data/redis/appendonlydir/ # 列出清单与各段文件
cat /data/redis/appendonlydir/appendonly.aof.manifest # 查看生效文件清单
redis-cli INFO persistence | grep -E 'aof_(enabled|base_size|current_size)'
redis-cli BGREWRITEAOF # 生成新 base 并切换清单
redis-check-aof /data/redis/appendonlydir/appendonly.aof.1.incr.aof # 校验增量文件文件类型与作用
| 文件 | 内容 | 作用 |
|---|---|---|
| manifest | 生效文件的清单 | 加载入口,记录类型与序号 |
| base 文件 | 某一时刻的数据全集 | 代表重写时的数据集基线 |
| incr 文件 | 基线之后的写命令 | 追加写入,可能有多份 |
| 被替换的旧文件 | 历史版本 | 切换完成后可清理释放空间 |
备份与迁移脚本如果还按旧文件名 appendonly.aof 去找文件,会漏掉新结构导致备份不完整。稳妥做法是整目录打包,或者按清单文件逐项列举,并在恢复时保持目录结构与清单一致。
排查启动失败时,第一步是核对清单与实际文件是否一一对应:清单里列出的文件缺失,或者目录里多出清单未登记的文件,都会让加载在初始化阶段直接失败。此时不要随手删除文件,先把整个目录备份下来再分析,避免把可恢复的数据毁掉。