如何在运行中的Redis实例上启用AOF且不丢失数据?
如何在已有RDB持久化的Redis实例中安全启用AOF
正确的在线启用步骤(无停机+全量数据保留)
- 直接通过
redis-cli执行命令开启AOF:
执行这条命令后,Redis会自动把当前内存中的所有数据(包括你之前RDB里的2GB/5GB历史数据),以Redis命令的格式写入新生成的AOF文件,完成后AOF文件就包含了从实例启动到现在的全量数据,不是只有开启AOF之后的新命令。整个过程不需要停服务,内存数据不会丢失。redis-cli CONFIG SET appendonly yes - 为了避免Redis重启后配置失效,执行命令持久化配置到
redis.conf:
这条命令会把当前生效的配置(包括redis-cli CONFIG REWRITEappendonly yes)覆盖写入配置文件,下次重启Redis时AOF会自动启用。
针对你示例场景的说明
你担心Day4故障重启后丢失Day2的5GB数据?不会发生。因为Day3执行CONFIG SET appendonly yes时,Redis已经把当时内存里的5GB数据全部写入了AOF文件,之后的500条命令也会实时追加到AOF中。重启时Redis会加载这个完整的AOF文件,所以Day2的5GB数据和Day3-4的500条命令都会被恢复,不会丢失历史数据。
为什么你最初的操作会丢失数据?
你之前停止Redis、修改配置开启AOF再重启,此时新生成的AOF文件是空的,而Redis默认在同时开启RDB和AOF时,重启会优先加载AOF文件(因为AOF数据更新更及时),所以空的AOF导致历史数据没被加载。而在线启用的方式会让Redis自动生成包含全量数据的AOF,从根源避免了这个问题。
额外说明
开启AOF后,Redis会同时保留RDB和AOF文件,日常可以继续用RDB做快照备份,AOF负责增量的命令持久化。后续重启时,Redis会自动选择AOF来恢复数据(因为AOF的数据完整性更高)。
内容的提问来源于stack exchange,提问作者Ankit Sahay
相关产品推荐
相关产品推荐

