1.服务器环境:

3主3从,192.168.24.16,192.168.24.17,192.168.24.18,每一台服务器上2个节点,分别为主节点和从节点

redis 修复机制 redis rdb aof 恢复_数据

 2.备份

开启的备份策略是默认的rdb,aof没有打开

redis 修复机制 redis rdb aof 恢复_redis_02

使用 Redis Desktop Manager连接,数据库中有3条数据

redis 修复机制 redis rdb aof 恢复_重启_03

现在我需要同时开启aof和rdb两个持久化策略,假如我们直接关闭redis,并且打开aof的开关,我们看看保存的数据还在不在。

redis 修复机制 redis rdb aof 恢复_数据_04

更改配置之后重启redis发现数据没了

redis 修复机制 redis rdb aof 恢复_redis 修复机制_05

 

appendonly.aof + dump.rdb,优先用appendonly.aof去恢复数据,但是我们发现redis自动生成的appendonly.aof是没有数据的然后我们自己的dump.rdb是有数据的,但是明显没用我们的数据。很简单,就是虽然你删除了appendonly.aof,但是因为打开了aof持久化,redis就一定会优先基于aof去恢复,即使文件不在,那就创建一个新的空的aof文件。

在数据安全丢失的情况下,基于rdb冷备,如何完美的恢复数据,同时还保持aof和rdb的双开

停止redis,关闭aof,拷贝rdb备份,重启redis,确认数据恢复,直接在命令行热修改redis配置,打开aof,这个redis就会将内存中的数据对应的日志,写入aof文件中此时aof和rdb两份数据文件的数据就同步了

 现在我们模拟假如aof文件损坏,如何使用rdb文件恢复,我们先删除aof文件,关闭aof配置,再启动redis:发现数据已经恢复:

redis 修复机制 redis rdb aof 恢复_redis 修复机制_06

而且appendonly.aof文件也没有,此时,我们在redis的客户端执行命令:    config set appendonly yes

打开aof,此时在aof文件的位置就会生成appendonly.aof文件

redis 修复机制 redis rdb aof 恢复_数据_07

 注意:在执行启动aof命令的时候,需要在所有的主节点全部执行,此命令只会在执行命令的节点生效。

重启redis,发现数据全部恢复正常,持久化方式也变成了rdb和aof同时执行。