在写入Redis (SET foo bar)期间,我得到以下错误:

MISCONF Redis被配置为保存RDB快照,但当前为 无法在磁盘上持久保存。可能修改数据集的命令是 禁用。有关错误的详细信息,请查看Redis日志。

基本上我理解的问题是,redis是不能在磁盘上保存数据,但不知道如何摆脱这个问题。

下面的问题也有同样的问题,它在很久以前就被抛弃了,没有答案,很可能没有尝试解决这个问题。


当前回答

在我的例子中,它与磁盘空闲空间有关。(你可以用df -h bash命令检查它)当我释放一些空间时,这个错误消失了。

其他回答

我知道这个线程稍微老一些,但当我早些时候得到这个错误时,这里是为我工作的,因为我知道我没有接近内存限制-两个答案都在上面找到。

希望这能在将来帮助到需要的人。

检查CHMOD目录…发现符号符号不一样。CHMOD目录文件夹到755 Dbfilename权限很好,不需要更改 重启redis-server 参考redis-server.log,发现该错误是访问被拒绝的结果。

再次-不确定DIR文件夹的权限是如何改变的,但我假设CHMOD回到755并重新启动redis-server,因为我之后能够ping到redis服务器。

另外,需要注意的是,redis确实拥有dbfilename和DIR文件夹的所有权。

在我的例子中,原因是磁盘的可用空间非常低(只有35 Mb)。我做了以下的事情

停止所有Redis相关进程 删除磁盘中的一些文件,以腾出足够的空间 删除redis转储文件(如果不需要现有数据) Sudo rm /var/lib/redis/* 删除所有现有数据库的所有键 Sudo redis-cli flushall 重新启动所有芹菜任务,并检查相应的日志是否有任何问题

在我绞尽脑汁思考了这么多so问题之后,终于 对我来说,@Axel Advento的回答奏效了,但没有额外的步骤- 我仍然面临许可问题。 我必须切换用户到redis,在它的home目录中创建一个新目录,然后将其设置为redis的目录。

sudo su - redis -s /bin/bash
mkdir redis_dir
redis-cli CONFIG SET dir $(realpath redis_dir)
exit # to logout from redis user (optional)

如果您在Linux机器上工作,还要重新检查数据库的文件和文件夹权限。

数据库和它的路径可以通过以下方式获得:

在redis-cli:

CONFIG GET dir 配置dbfilename

在命令行中ls -l。目录的权限应为755,文件的权限应为644。此外,通常redis-server作为用户redis执行,因此通过执行sudo chown -R redis:redis /path/to/rdb/folder,给用户redis文件夹的所有权也是很好的。在这里的回答中已经详细说明了这一点。

所有这些答案都不能解释RDB保存失败的原因。


作为我的情况,我检查了redis日志,发现:

14975:M 18 Jun 13:23:07.354 #后台保存被信号9终止

在终端执行如下命令:

sudo egrep -i -r 'killed process' /var/log/

它显示:

/var/log/kern.log.1:Jun 18 13:23:07 10-10-88-16 kernel: [28152358.208108] Killed process 28416 (redis-server) total-vm:7660204kB, anon-rss:2285492kB, file-rss:0kB

就是这样!这个进程(redis保存rdb)被OOM杀手杀死

是指:

https://github.com/antirez/redis/issues/1886

查找哪个进程被Linux OOM杀手杀死