首页/数据/数据库速查/磁盘满与 MISCONF 写入拒绝处置
Redis 运维与场景124 条

磁盘满与 MISCONF 写入拒绝处置

RDB 保存失败(默认 stop-writes-on-bgsave-error yes)后,Redis 拒绝所有写并报 MISCONF 错误;AOF 写失败同样拒绝写入。

数据库速查数据更新于 2026-10-13

磁盘满与 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 等于带病运行:磁盘问题没解决,数据丢失风险持续累积,只能作为恢复流程中的过渡动作。

易错点

  • 报警只提示不能写就去重启服务:根因在磁盘,重启后很快再次触发,还会丢掉可用的诊断现场
  • 只看 df -h 不看 df -i:容量充足但 inode 耗尽时快照同样失败,排查会走进死胡同
  • 把开关关掉当成解决方案:故障被掩盖,快照一直没有成功,宕机即丢失数据
  • 磁盘恢复后忘记验证一次成功快照:写入恢复了但持久化仍然坏着,问题被延后暴露

数据来源与参考

  • Redis 官方文档: stop-writes-on-bgsave-error
  • Redis 官方文档: 持久化故障

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌