在写入Redis (SET foo bar)期间,我得到以下错误:
MISCONF Redis被配置为保存RDB快照,但当前为 无法在磁盘上持久保存。可能修改数据集的命令是 禁用。有关错误的详细信息,请查看Redis日志。
基本上我理解的问题是,redis是不能在磁盘上保存数据,但不知道如何摆脱这个问题。
下面的问题也有同样的问题,它在很久以前就被抛弃了,没有答案,很可能没有尝试解决这个问题。
在写入Redis (SET foo bar)期间,我得到以下错误:
MISCONF Redis被配置为保存RDB快照,但当前为 无法在磁盘上持久保存。可能修改数据集的命令是 禁用。有关错误的详细信息,请查看Redis日志。
基本上我理解的问题是,redis是不能在磁盘上保存数据,但不知道如何摆脱这个问题。
下面的问题也有同样的问题,它在很久以前就被抛弃了,没有答案,很可能没有尝试解决这个问题。
当前回答
在我的例子中,原因是磁盘的可用空间非常低(只有35 Mb)。我做了以下的事情
停止所有Redis相关进程 删除磁盘中的一些文件,以腾出足够的空间 删除redis转储文件(如果不需要现有数据) Sudo rm /var/lib/redis/* 删除所有现有数据库的所有键 Sudo redis-cli flushall 重新启动所有芹菜任务,并检查相应的日志是否有任何问题
其他回答
我也面临着同样的问题。两个答案(被点赞最多的和被接受的)都只是暂时的解决办法。
此外,配置set stop-writes-on-bgsave-error no是一种可怕的忽略这个错误的方式,因为这个选项所做的是阻止redis通知写已经停止,并继续在快照中不写数据。这是简单地忽略这个错误。 请参考这个
至于在redis-cli的config中设置dir,当你重新启动redis服务时,这个问题也会被清除,并且会再次弹出相同的错误。在redis.conf中dir的默认值是。/,如果你以root用户启动redis,那么。/是/,写权限不被授予,因此会出现错误。
最好的方法是在redis.conf文件中设置dir参数,并对该目录设置适当的权限。大多数debian发行版都将它放在/etc/redis/redis.conf中
感谢大家检查这个问题,显然错误是在bgsave期间产生的。
对我来说,在shell中输入config set stop-writes-on-bgsave-error no并重新启动Redis解决了这个问题。
如果你遇到错误,一些重要的数据不能被丢弃在运行的redis实例上(rdb文件或其目录的权限不正确,或运行出磁盘空间),你总是可以重定向rdb文件写入其他地方。
使用redis-cli,你可以这样做:
CONFIG SET dir /tmp/some/directory/other/than/var
CONFIG SET dbfilename temp.rdb
在此之后,您可能想要执行BGSAVE命令,以确保数据将被写入rdb文件。确保当你执行INFO持久化时,bgsave_in_progress已经是0,rdb_last_bgsave_status是ok。在此之后,您现在可以开始在安全的地方备份生成的rdb文件。
检查dir: var/lib/redis的权限,应该是redis:redis
在redis.conf第235行,让我们像这样修改配置
- stop-writes-on-bgsave-error yes
+ stop-writes-on-bgsave-error no