我在ubuntu 12.04上使用ubuntu apt-get安装了redis服务器2.8.
我从其他数据库复制了dump.rdb.现在,当我尝试启动新服务器时,我不断得到:
[35763] 04 Mar 01:51:47.088 * 1 changes in 900 seconds. Saving...
[35763] 04 Mar 01:51:47.088 * Background saving started by pid 43313
[43313] 04 Mar 01:51:47.088 # Failed opening .rdb for saving: Permission denied
Run Code Online (Sandbox Code Playgroud)
我怎么解决这个问题?
cha*_*yWu 34
您应该检查redis.conf文件以查看dir和dbfilename中的权限.如果dbfilename中指定的文件位于dir路径中指定的路径中,并且权限也是正确的.那么问题应该修复.
希望这会对某人有所帮助.
PS
要查找redis.conf文件位置,可以使用以#ps ax | grep redis进行检查.通常它会传递给redis-server输入文件.
对于dir权限:755对于dbfilename,它应该是644
有时候,你还需要使用top命令来检查是否user:group的redis-server和所有者DIR是一致的.即redis-server由redis运行:redis,但dir在root:root下.在这种情况下,你需要chown redis:redis -R dir.
以上都不是对我有用。我已经看到周围的每个人都对BGSAVE如此关注。.但是当您不在生产环境中时,SAVE为您提供了一个更直接的答案:ERR。BGSAVE不会,除非您检查日志。
在挖了几十个帖子后,我没有发现任何线索。唯一解决的问题是停止redis服务并手动运行它。
起初我以为它可能与代表Redis运行的用户有关。完全没有:实际的区别是该死的systemd子系统,在redis config服务文件(/etc/systemd/system/redis.service)中的某个点具有以下内容:
ReadWriteDirectories: -/etc/redis
Run Code Online (Sandbox Code Playgroud)
哇超级酷!最终,这将阻止redis完全访问系统中的任何位置,即使权限完全允许它也是如此。
我多么天真地认为许可足以确保某项东西享有适当的权利。(是的,我很讽刺)。
我的 /lib/system/systemd/redis-server.service 文件包含以下内容:
ReadOnlyDirectories=/
ReadWriteDirectories=-/var/lib/redis
Run Code Online (Sandbox Code Playgroud)
我的 /etc/redis/redis.conf 文件指出数据库应该位于 /data/redis
dir /data/redis
Run Code Online (Sandbox Code Playgroud)
上面的 systemd 配置文件有效地使 /data/redis 只读。
一旦我将 redis.conf 文件更改为:
dir /var/lib/redis
Run Code Online (Sandbox Code Playgroud)
我停止收到错误。