背景描述
在学习redis的过程中,发现配置好redis.conf
的dir
后仍然不能实现数据持久化,始终不能生成dump.rdb
和appendonly.aof
,后续在学习主从复制的过程中,配置好replicaof masterip maserport
后仍然不能够实现主从复制。此外,配置的requirepass
也失效了,无需通过auth即可操作redis.
注意
在后文的描述中,省略了redis.conf
的所有配置,如bind,requirepass,replicaof,masterauth,关于这些配置读者可自行搜索或者评论区提问
问题排查
经反复确认配置项无误,最后发现问题在于:启动redis时,并没有加载自己配置的redis.conf
而是使用了默认的配置文件,这种情况下,启动的redis是相当于没有做任何配置的,这也解释了为什么前面的所有配都失效了
问题解决
通过执行redis_init_script
(默认名称为这个)脚本来启动redis
service redis_init_script start
当然,前置步骤为修改该脚本的相关内容(需要连接正确的redis.conf
路径),并将其放在/etc/init.d
目录下
这样之后,先通过ps -ef|grep redis
来检测redis是否成功启动,如果启动成功,再通过redis-cli
进入redis查看是否需要密码验证,如果需要,那么可以证明已经加载到正确配置文件。
这时候再在设置的dir
下,也就有了对应的持久化文件
前面设置的主从复制情况也可以通过在redis-cli下执行info replication
来验证了
如果发生执行service redis_init_script start
后依然不能成功启动redis的情况,可以先尝试下reboot命令重启服务器。
另外如果发生
/var/run/redis_6379.pid exists, process is already running or crashed
错误那么直接rm -rf /var/run/redis_6379.pid
再启动redis吧。
最后
这一块的排查和解决笔者花了较长时间,如果在过程中遇到其他问题,可评论区提问