redis修改data目录之后,RDB和AOF写入失败

如果redis默认安装,不修改配置文件情况下。默认的’dir’目录是var/lib/redis,当满足保存条件时,一般情况下是5分钟10个KEY或者15分钟1个KEY的情况,会在该目录下更新dump.rdb文件。

然而这一次我没有使用默认配置,而是修改了’dir’指向的目录,变更为/data/redis之后,RGB就不能正常使用了。

需要说明的是, 我变更目录之后,对新的目录设置了跟默认目录一样的访问权限。

chown -R redis:redis /data/redis

查看redis的日志,里面基本都这样的错误

12472:M 04 Sep 15:38:02.097 * Background saving started by pid 12740
12740:C 04 Sep 15:38:02.098 # Failed opening the RDB file dump.rdb (in server root dir /data/redis) for saving: Permission denied
12472:M 04 Sep 15:38:02.198 # Background saving error

直接根据日志分析,应该是没有权限打开文件,我去/data/redis里面查看,没有dump.rdb文件。因为我是刚安装,第一次写入的时候,需要创建dump.rdb,因为权限问题创建失败。

网上各种搜索,几乎都是说把rdb文件的权限改一下,可是我连这个文件都没有,怎么修改,基本等于没说。
在StackOverFlow上,只有一个人提出了不同的观点:

It wasn’t exactly this issue, but SELinux was ultimately the corporate. I had to use the audit2allow tool to fix it.

这哥们还提到一个关于_audit2allow链接

看到这里,我马上去看了/var/log/audit/audit.log

type=AVC msg=audit(1504510400.051:9448): avc:  denied  { write } for  pid=12625 comm="redis-server" name="redis" dev="sda5" ino=3145729 scontext=system_u:system_r:redis_t:s0 tcontext=unconfined_u:object_r:unlabeled_t:s0 tclass=dir
type=SYSCALL msg=audit(1504510400.051:9448): arch=c000003e syscall=2 success=no exit=-13 a0=7ffdb82cbf10 a1=241 a2=1b6 a3=0 items=0 ppid=12472 pid=12625 auid=4294967295 uid=997 gid=995 euid=997 suid=997 fsuid=997 egid=995 sgid=995 fsgid=995 tty=(none) ses=4294967295 comm="redis-server" exe="/usr/bin/redis-server" subj=system_u:system_r:redis_t:s0 key=(null)

redis-server写入操作被拒绝了,文章中提到的audit2allow没找到,但是我看到他说的SELinux,倒是觉得可能我关掉SELinux就好了。

于是尝试关闭SELinux, 重启机器,不再出现这个错误,dump.rdb可以正常创建更新了。

虽然当前问题解决了,但是为什么SELinux会拒绝redis-server的创建请求,还需要深入研究。

    原文作者:挨踢的懒猫
    原文地址: https://www.jianshu.com/p/2ad2ae9f8446
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞