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

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

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

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


当前回答

是的,这是因为当前用户没有修改“dump.rdb”的权限。

因此,除了创建一个新的RDB文件,您还可以对旧文件授予权限(更改其所有权)。

在redis-cli中输入:

配置get dir

你会得到"/usr/local/var/db/redis"(这是redis写入数据的位置)

使用终端前往此位置

cd 
cd /usr/local/var/db

输入以下命令(使用我们的用户名):

sudo chown -R [username] db

这将改变为所有者。

这对我很有用。

其他回答

是的,这是因为当前用户没有修改“dump.rdb”的权限。

因此,除了创建一个新的RDB文件,您还可以对旧文件授予权限(更改其所有权)。

在redis-cli中输入:

配置get dir

你会得到"/usr/local/var/db/redis"(这是redis写入数据的位置)

使用终端前往此位置

cd 
cd /usr/local/var/db

输入以下命令(使用我们的用户名):

sudo chown -R [username] db

这将改变为所有者。

这对我很有用。

使用redis-cli,你可以阻止它尝试保存快照:

config set stop-writes-on-bgsave-error no

这是一个快速的解决方法,但是如果你关心使用它的数据,你应该检查一下为什么bgsave首先失败了。

FWIW,我遇到了这个问题,解决方案是简单地向盒子添加一个交换文件。我使用了这个方法:https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04

在采取任何行动之前检查你的Redis日志。这个线程中的一些解决方案可能会删除你的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杀手杀死