磁盘满与 MISCONF 是什么
默认配置下,只要后台快照保存失败,Redis 就拒绝所有写命令并报 MISCONF 错误;开启 AOF 后写盘失败同样会拒绝写入。这是数据保护设计:宁可拒绝服务,也不让内存里的新数据在没有落盘能力时继续累积。
基本信息
| 触发开关 | stop-writes-on-bgsave-error,默认 yes |
|---|---|
| 典型报错 | MISCONF Redis is configured to save RDB snapshots |
| AOF 场景 | 追加日志写失败直接拒绝写入,不受该开关控制 |
| 观测点 | INFO persistence 的 rdb_last_bgsave_status 与 aof_last_write_status |
| 排查入口 | 磁盘容量 df -h 与 inode 使用 df -i 都要看 |
处置顺序
- 先确认磁盘状态:容量、inode、挂载点是否只读,避免误判为 Redis 自身故障
- 清理或扩容:删除过期备份与日志、扩盘或迁移数据目录
- 人工验证落盘:执行 BGSAVE 或 BGREWRITEAOF,确认返回成功状态
- 恢复写入:确认快照成功后再放行,必要时临时关闭拒绝写入开关并记录风险
- 补监控:把磁盘水位与持久化状态接入告警,避免同因再次发生
典型报错与处置
典型报错与处置
# MISCONF Redis is configured to save RDB snapshots, but it's currently unable to persist to disk.
df -h /var/lib/redis # 看容量水位
df -i /var/lib/redis # 看 inode,容量够但 inode 耗尽同样会失败
redis-cli INFO persistence | grep -E "rdb_last_bgsave_status|aof_last_write_status"
redis-cli BGSAVE # 手动触发,验证磁盘已可写
# 应急放行(风险操作,确认磁盘问题已解决后再考虑):
redis-cli CONFIG SET stop-writes-on-bgsave-error no输出逐列读法
| 字段 | 含义 | 正常与异常 |
|---|---|---|
| rdb_last_bgsave_status | 最近一次快照结果 | ok 为正常,err 表示落盘失败 |
| aof_last_write_status | 最近一次追加日志写入结果 | ok 为正常,err 需立刻处理 |
| rdb_changes_since_last_save | 距上次成功快照的变更次数 | 持续增长说明快照一直没成功 |
| rdb_last_cow_size | 快照期间写时复制占用内存 | 异常偏大说明写入量或内存压力高 |
写入被拒绝时业务会看到明确的错误响应,属于显式失败;比关掉开关继续写入更安全,不要把它当成 Redis 的缺陷。
临时关掉 stop-writes-on-bgsave-error 等于带病运行:磁盘问题没解决,数据丢失风险持续累积,只能作为恢复流程中的过渡动作。