Redis:无法打开.rdb进行保存:权限被拒绝

Nie*_*ian 35 redis

我在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文件以查看dirdbfilename中的权限.如果dbfilename中指定的文件位于dir路径中指定的路径中,并且权限也是正确的.那么问题应该修复.

希望这会对某人有所帮助.

PS

要查找redis.conf文件位置,可以使用以#ps ax | grep redis进行检查.通常它会传递给redis-server输入文件.

对于dir权限:755对于dbfilename,它应该是644

有时候,你还需要使用top命令来检查是否user:groupredis-server和所有者DIR是一致的.即redis-serverredis运行:redis,但dirroot:root下.在这种情况下,你需要chown redis:redis -R dir.

  • dir和dbfilename由redis和777拥有,但我仍然在保存时出错 (2认同)
  • 以下是我检查权限的方法:“stat /var/lib/redis”应该看到“访问:(0755/drwxr-xr-x)”。然后 `stat /var/lib/redis/dump.rdb` 应该会看到 `Access: (0664/-rw-rw-r--)`。就我而言,我看到第二个是“0660”,并使用“chmod 0664 /var/lib/redis/dump.rdb”修复了它。然后redis又正常启动了。 (2认同)

Ric*_*rin 6

以上都不是对我有用。我已经看到周围的每个人都对BGSAVE如此关注。.但是当您不在生产环境中时,SAVE为您提供了一个更直接的答案:ERR。BGSAVE不会,除非您检查日志。

在挖了几十个帖子后,我没有发现任何线索。唯一解决的问题是停止redis服务并手动运行它。

起初我以为它可能与代表Redis运行的用户有关。完全没有:实际的区别是该死的systemd子系统,在redis config服务文件(/etc/systemd/system/redis.service)中的某个点具有以下内容:

ReadWriteDirectories: -/etc/redis
Run Code Online (Sandbox Code Playgroud)

哇超级酷!最终,这将阻止redis完全访问系统中的任何位置,即使权限完全允许它也是如此。

我多么天真地认为许可足以确保某项东西享有适当的权利。(是的,我很讽刺)。


Tim*_*art 5

我的 /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)

我停止收到错误。