50

每当我执行任何修改redis中数据的命令时,我都会收到以下错误

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.

我在mac上使用brew安装了redis。如何获取 redis-server 记录信息的日志文件的位置。我试图寻找redis conf。文件,但也找不到。

[1] redis conf 文件 [2] redis 日志文件的默认位置是什么。

如何摆脱上述错误,并能够执行修改redis中数据的命令。

4

7 回答 7

26

使用 brew 安装时,日志文件设置为标准输出。您需要编辑/usr/local/etc/redis.conf日志文件并将其更改为其他内容。我将我的设置为:

logfile /var/log/redis-server.log

您还将确保运行 redis 的用户对日志文件具有写入权限,否则 redis 将无法完全启动。然后重启redis:

brew services restart redis

重新启动后,错误需要一段时间才能显示在日志中,因为它发生在 redis 定时刷新失败之后。你应该看到类似的东西:

[7051] 29 Dec 02:37:47.164 # Background saving error
[7051] 29 Dec 02:37:53.009 * 10 changes in 300 seconds. Saving...
[7051] 29 Dec 02:37:53.010 * Background saving started by pid 7274
[7274] 29 Dec 02:37:53.010 # Failed opening .rdb for saving: Permission denied

在 brew install 之后,它会尝试保存到/usr/local/var/db/redis/并且由于 redis 可能以您当前的用户而不是 root 身份运行,因此它无法写入它。一旦 redis 有权写入该目录,您的日志文件将显示:

[7051] 29 Dec 03:08:59.098 * 1 changes in 900 seconds. Saving...
[7051] 29 Dec 03:08:59.098 * Background saving started by pid 8833
[8833] 29 Dec 03:08:59.099 * DB saved on disk
[7051] 29 Dec 03:08:59.200 * Background saving terminated with success

并且该stop-writes-on-bgsave-error错误将不再引发。

于 2013-12-28T18:36:58.913 回答
10

所以我想在这里添加答案有点晚了,但因为我想知道你的问题,因为我有同样的错误。我通过像这样更改我的 redis.conf 的dir变量来解决它:

# The filename where to dump the DB
dbfilename dump.rdb

# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
# 
# The Append Only File will also be created inside this directory.
# 
# Note that you must specify a directory here, not a file name.
dir /root/path/to/dir/with/write/access/

默认值为: ./ ,因此根据您启动 redis 服务器的方式,您可能无法保存快照。

希望它可以帮助某人!

于 2014-09-16T15:58:50.327 回答
4

就我而言,我通过以下步骤解决了这个问题

原因:默认情况下,redis 存储数据@./,如果 redis 使用 redis 用户运行,这意味着 redis 将无法在 ./ 文件中写入数据,那么您将面临上述错误。

解决方法: 步骤#1(输入redis可以进行写操作的有效位置)root@fpe:/var/lib/redis# vim /etc/redis/redis.conf

dir /var/lib/redis # (这个位置必须有redis用户写的权限)

步骤#2(连接到redis cli和映射目录以写入并发出以下变量)

127.0.0.1:6379> 配置集目录“/var/lib/redis”

127.0.0.1:6379> BGSAVE -

这将使 redis 能够将数据写入转储文件。

于 2017-10-18T12:02:11.670 回答
2

正在通过 github 讨论,建议的解决方案是运行

在 redis-cli 中配置设置 stop-writes-on-bgsave-error no。这是链接 https://github.com/redis/redis/issues/584#issuecomment-11416418

于 2021-02-15T20:07:55.213 回答
2

修复此错误的步骤:

通过键入转到 redis cliredis-cli

127.0.0.1:6379> config set stop-writes-on-bgsave-error no

之后尝试设置键值

127.0.0.1:6379> set test_key 'Test Value'
127.0.0.1:6379> get test_key
"Test Value"
于 2021-08-10T04:40:56.593 回答
1

这通常是因为权限限制。就我而言,它是 redis 禁用的写入选项。

您可以尝试redis-cli在shell中运行,然后运行以下命令:

set stop-writes-on-bgsave-error yes
于 2013-12-19T03:28:43.033 回答
1

检查以下地方:

/usr/local/Cellar/redis...
/usr/local/var/log/redis.log
/usr/local/etc/redis.conf

此错误通常表明写入权限存在问题,请确保您的 RDB 目录是可写的。

于 2013-11-09T09:39:41.560 回答