6

我试图在 debian 机器上设置主从同步。我总是在我的日志中得到那个错误,我不知道临时文件应该在哪里=/

[9559] 31 Jul 11:48:17 * Connecting to MASTER...
[9559] 31 Jul 11:48:17 * MASTER <-> SLAVE sync started
[9559] 31 Jul 11:48:17 * Non blocking connect for SYNC fired the event.
[9559] 31 Jul 11:48:22 # Opening the temp file needed for MASTER <-> SLAVE synchronization: Permission denied

希望你们能帮助我:)

4

2 回答 2

8

运行该redis-server进程的用户很可能无权访问工作目录。

检查您的redis.conf(在大多数情况下/etc/redis.conf)并找到dir设置(搜索“工作目录”以找到它和它的文档),确保该目录可由运行redis-server.

于 2012-07-31T10:07:09.513 回答
6

实际上,master 在 SYNC 时生成的文件是一个普通的快照文件(即 rdb 文件),与任何其他 rdb 文件写入相同的位置。

此位置在主实例的 Redis 配置文件中设置 - 请参阅 dir 和 dbfilename 参数。

例如在 /data/redis/dump.rdb 中生成转储

# 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.
#
# Also the Append Only File will be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /data/redis

当然,启动 Redis 的用户必须对该位置具有适当的访问权限。

现在,在从机端,从主机读取的转储文件被复制到一个临时文件中,其名称类似于 temp-%d.%ld.rdb(包括时间戳和 pid)。该文件在工作目录中创建,对应从属实例配置中的 dir 参数。所以即使RDB在slave端没有激活,也必须正确设置dir参数并指向具有合适访问权限的目录。

于 2012-07-31T10:07:03.440 回答