首页/数据/Redis 进阶速查/redis-check-aof 修复 AOF
持久化56 条

redis-check-aof 修复 AOF

redis-check-aof 校验 AOF 的格式与命令完整性,--fix 会把文件截断到最后一个完整命令并重写,是最常见的 AOF 抢救手段。

Redis 进阶速查数据更新于 2026-10-13

redis-check-aof 的用途

redis-check-aof 是随 Redis 一起发布的 AOF 校验与修复工具:不加参数时它只读地逐条解析 AOF 里的命令,确认格式完整、能被重新执行,并给出解析到哪个字节位置为止;加 --fix 时它会把文件截断到最后一个完整命令处并重写,丢弃尾部残缺的字节。它解决的是「AOF 尾部写坏导致实例起不来」这一类问题,但对中间位置的损坏同样只能截断,损坏点之后的全部数据都会消失,因此它本质上是止损工具而不是数据恢复工具。

基本信息

只读校验redis-check-aof <aof 文件路径>
修复模式redis-check-aof --fix <aof 文件路径>
配套工具redis-check-rdb 用于校验 RDB 文件,用法类似
前置条件先停掉对应实例,并先复制一份原始文件
修复语义截断到最后一个完整命令,之后的内容全部丢弃
多文件结构Redis 7 起 AOF 由 manifest 组织为多个文件,要按 manifest 引用的对象处理

典型使用场景

  • 实例启动报 AOF 格式错误或文件意外结束时做抢救,让服务先起来
  • 断电、磁盘写满、容器被强制杀掉之后检查 AOF 完整性
  • 恢复演练:拿一份副本走一遍校验与修复流程,确认耗时与数据损失量
  • 升级前预检:确认现有 AOF 能被新版本正常加载
  • 变更前留底:评估文件尾部是否恰好停在半条命令上

安全修复流程

安全修复流程
sudo systemctl stop redis                                  # 1 先停实例,避免边写边修
cp -a /var/lib/redis/appendonly.aof /var/lib/redis/appendonly.aof.bak   # 2 备份原文件
redis-check-aof /var/lib/redis/appendonly.aof              # 3 只校验,不改动文件
redis-check-aof --fix /var/lib/redis/appendonly.aof        # 4 截断到最后一个完整命令
sudo systemctl start redis                                 # 5 启动并看日志是否还有 AOF 报错
redis-cli INFO persistence | grep -E 'aof_last_write_status|aof_enabled'
redis-cli DBSIZE                                           # 6 与业务侧记录核对规模

校验与修复对照

维度不加 --fix加 --fix
文件修改不改动,纯读取截断并重写文件
尾部残破命令报告位置并给出结论丢弃残破部分,保留之前内容
中间位置损坏报错指出位置同样只能截断到损坏点之前
适用前提任何时刻都可执行实例已停、原文件已备份
结果验证看解析结论与字节位置启动后核对 DBSIZE 与业务数据
校验输出会给出分析到的字节位置与文件总大小,两者之差就是尾部会被丢弃的量;如果解析位置离文件末尾很近,说明只有最后一次写入没落全,损失很小;如果解析位置远小于文件大小,说明损坏点很靠前,修复后的数据规模会明显缩水,此时更应考虑直接回退到可用备份。
--fix 是不可逆的截断操作。必须先停实例、先备份,并在副本上验证流程后再对正式文件动手。对唯一一份且没有备份的 AOF 直接执行修复,会把一次可控的启动失败扩大成永久的数据丢失。

易错点

  • 实例仍在运行时执行修复,工具与运行中的进程同时操作同一个文件,写回内容可能被覆盖或截断,结果不可预期
  • 没有备份直接 --fix,截断掉的字节无法找回,而且丢弃范围是「到损坏点为止」,往往比预想的更多
  • 只盯着 appendonly.aof 单个文件,忽略 7.x 多文件 AOF 结构下 manifest 与其引用的 base、incr 文件,导致校验对象根本不是实际加载的文件
  • 修好能启动就认为数据没丢,截断意味着尾部写入已经消失,必须与业务侧对账并评估重放或补数方案
  • 把文件损坏归咎于工具或版本,实际更常见的是磁盘写满、写失败或进程被强杀,修完不查根因还会再次发生

数据来源与参考

  • Redis 官方文档:redis-check-aof 工具说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌