一、故障表现 1、新增一个key失败 127.0.0.1:6379> set lion 2 (error) MISCONF 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.

2、无法关闭服务 service redis-server restart service redis-server stop 两个命令都是一直卡在stop那一步,一直无法关闭

kill ps aux|grep 'redis-server '|grep -v grep|awk '{print $2}' #无法杀掉 kill -9 ps aux|grep 'redis-server '|grep -v grep|awk '{print $2}' #强行杀掉 强行杀掉后无法启动,原来还有个pid的文件没有删除 /run/redis/redis-server.pid rm /run/redis/redis-server.pid #手动删除它之后才能启动Redis

补充: 下面是无法关闭redis-server的原因 8576:signal-handler (1527833505) Received SIGTERM scheduling shutdown... 8576:M 01 Jun 14:11:45.180 # User requested shutdown... 8576:M 01 Jun 14:11:45.180 * Saving the final RDB snapshot before exiting. 8576:M 01 Jun 14:11:45.180 # Failed opening .rdb for saving: Permission denied 8576:M 01 Jun 14:11:45.180 # Error trying to save the DB, can't exit. 8576:M 01 Jun 14:11:45.180 # SIGTERM received but errors trying to shut down the server, check the logs for more information

二、搜索解决方法 1、关闭”当持久化出错时停止写入硬盘“ 127.0.0.1:6379> config set stop-writes-on-bgsave-error no 2、修改目录及持久化权限为755 本来该目录就是755,所以与此无关。 看了几篇基本上和这两个相关。

三、老老实实看日志解决办法 1、在调试过程中一直监控日志 tail -f /var/log/redis/redis-server.log #文件目录及文件名请按自己配置文件,有两行有用的信息 27915:C 01 Jun 14:12:14.038 # Failed opening .rdb for saving: Permission denied 8576:M 01 Jun 14:12:14.138 # Background saving error 2、将dump.rdb所在目录权限修改为777,并将原来的dump.rdb删除,杀掉redis-server并删除redis-server.pid后启动redis-server,奇迹出现了。 ll -rw-rw---- 1 redis redis 41 Jun 1 14:42 dump.rdb 看到亮点了吧,用户和用户组都是redis,为啥?

3、再来看服务启动的脚本 vi /etc/init.d/redis-server 其中有一段 Run_parts () { if [ -d /etc/redis/${NAME}.${1}.d ] then su redis -s /bin/sh -c "run-parts --exit-on-error /etc/redis/${NAME}.${1}.d" fi }

su redis 就在这。

四、最终解决 chown redis:redis -R dir #dir 为redis配置文件中dir的目录 chmod 755 dir #dir 为redis配置文件中dir的目录,最后要将前面改为777的权限恢复回来。

五、总结 在这个事件中本来是很简单的问题,但在此过程中花费了挺长时间,前前后后花了半天。究其原因有二,一是心急,没有好好看日志;二是意外,没有想到会使用redis这个用户来启动,因为启动的时候是在root权限下。