MISCONF Redis is configured to save RDB snapshots

MISCONF Redis is configured to save RDB snapshots

Redis使用过程中报错,报错信息如下:

1
2
3
(error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to 
persist on disk. Commands that may modify the data set are disabled. Please check Redis
logs for details about the error.

解释:Redis配置去保存RDB快照,但是目前无法保存到磁盘。修改数据命令无效。错误详情请查看redis日志。

没有看Redis logs前,通过关键搜索这个问题,网上建议”config set stop-writes-on-bgsave-error no”,于是抱着试试看的心理,结果确实还能行。这样设置表示bgsave出现错误的时候停止写操作,可能会影响数据保存,只是忽略的错误。

1
redis 192.168.161.253:6379> config set stop-writes-on-bgsave-error no

可惜好景不长,过一段时间再次操作,发现问题依旧。
于是继续搜索,一哥们说,应该在/etc/sysctl.conf 添加一项 ‘vm.overcommit_memory = 1’ ,然后重启(或者运行命令’sysctl vm.overcommit_memory=1’ )使其生效。)继续尝试,发现问题还是存在。。。
overcommit_memory说明

1
2
3
4
5
overcommit_memory文件指定了内核针对内存分配的策略,其值可以是0、1、2。                               
0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;
否则,内存申请失败,并把错误返回给应用进程。
1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
2, 表示内核允许分配超过所有物理内存和交换空间总和的内存

本来想偷懒,最后还是不得不做,设置日志文件logfile,看错误日志:

1
2
3
4
6390:M 14 Oct 10:24:10.056 * 1 changes in 900 seconds. Saving...
6390:M 14 Oct 10:24:10.057 * Background saving started by pid 7085
7085:C 14 Oct 10:24:10.058 # Failed opening .rdb for saving:Permission denied
6390:M 14 Oct 10:24:10.058 * Background saving error

使用关键字Failed opening .rdb for saving:Permission denied重新搜索,得到结论:权限不足。
首先,检查redis安装目录,本次操作用户是否有读写权限,最好修改为所有者。
然后,检查redis.conf文件里面的dir ./,./表示当前目录,检查当前目录是否有读写权限。

./目录说明

1
linux-dmvx:/usr/redis-3.0.1/src # ./redis-server /usr/redis-3.0.1/redis.conf

此时的./表示:/usr/redis-3.0.1/src

1
linux-dmvx:/ # /usr/redis-3.0.1/src/redis-server /usr/redis-3.0.1/redis.conf

此时的./表示:根目录
只要保证这两个目录对于当前用户均有读写权限,
那么就不会再有这个错误:Failed opening .rdb for saving:Permission denied

另附Suse 11 Sp2创建用户以及授权的命令:

1
2
3
4
5
6
新建用户
groupadd redisMgr #添加组redisMgr
useradd -g redisMgr redis #新建用户redis,指定为redisMgr组
password redis #修改redis用户密码redis
变更文件夹权限
chown redis:redisMgr /usr/redis-3.0.1 #chown 用户名:组名 路径