Redis快速恢复数据

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis快速恢复数据
    • Redis的flushall/flushdb命令可以做数据清除,对于Redis的开发和运维人员有一定帮助,然而一旦误操作,它的破坏性也是很明显的。怎么才能快速恢复数据,让损失达到最小呢?
    • 注意:为了方便说明,下文中除了AOF文件中的flushall/flushdb以外,其他所有的flushall/flushdb都用flush代替
    • 本文假设进行flush操作的Redis是一对主从结构的主节点,其中键值对的个数是100万,每秒写入量是1000

    一、缓存与存储

      • 被误操作flush后,根据当前Redis是缓存还是存储使用策略有所不同:
        • 缓存:对于业务数据的正确性可能造成损失还小一点,因为缓存中的数据可以从数据源重新进行构建,但是在前面文章介绍了缓存雪崩和缓存穿透的相关知识,当前场景也有类似的地方,如果业务方并发量很大,可能会对 后端数据源造成一定的负载压力,这个问题也是不容忽视
        • 存储:对业务方可能会造成巨大的影响,也许flush操作后的数据是重要配置,也可能是一些基础数据,也可能是业务上的重要一环,如果没有提 前做业务降级操作,那么最终反馈到用户的应用可能就是报错或者空白页面 等,其后果不堪设想。即使做了相应的降级或者容错处理,对于用户体验也有一定的影响
          • 所以Redis无论作为缓存还是作为存储,如何能在flush操作后快速恢复数据才是至关重要的。持久化文件肯定是恢复数据的媒介,下面将对AOF和RDB文件进行分析

          二、借助AOF机制恢复

            • Redis执行了flush操作后,AOF持久化文件会受到什么影响呢?如下所示:
              • appendonly no:对AOF持久化没有任何影响,因为根本就不存在AOF文 件
              • appendonly yes:只不过是在AOF文件中追加了一条记录,例如下面就是AOF文件中的flush操作记录:
                  flushall
                  1. image.gif
                    • 虽然Redis中的数据被清除掉了,但是AOF文件还保存着flush操作之前完整的数据,这对恢复数据是很有帮助的。注意问题如下:
                      • 1)如果发生了AOF重写,Redis遍历所有数据库重新生成AOF文件,并会覆盖之前的AOF文件。所以如果AOF重写发生了,也就意味着之前的数据就丢掉了,那么利用AOF文件来恢复的办法就失效了。所以当误操作后,需要考虑如下两件事:
                        • 调大AOF重写参数auto-aof-rewrite-percentage和auto-aof-rewrite-minsize,让Redis不能产生AOF自动重写
                        • 拒绝手动bgrewriteaof
                          • 2)如果要用AOF文件进行数据恢复,那么必须要将AOF文件中的flushall相关操作去掉,为了更加安全,可以在去掉之后使用redis-check-aof这个工具去检验和修复一下AOF文件,确保AOF文件格式正确,保证数据恢复正常

                            三、RDB有什么变化

                              • 关于RDB语法可以参阅:
                              • Redis执行了flushall操作后,RDB持久化文件会受到什么影响呢?
                              • 1)如果没有开启RDB的自动策略:那么除非手动执行过save、bgsave或者发生了主从的全量复制,否则RDB文件也会保存flush操作之前的数据,可以作为恢复数据的数据源。注意问题如下:
                                • RDB文件中的数据可能没有AOF实时性高,也就是说,RDB文件很可能很久以前主从全量复制生成的,或者之前用save、bgsave备份的
                                • 防止手动执行save、bgsave,如果此时执行save、bgsave,新的RDB文件就不会包含flush操作之前的数据,被老的RDB文件进行覆盖
                                    • 2)如果开启了RDB的自动策略:由于flush涉及键值数量较多,RDB文件会被清除,意味着使用RDB恢复基本无望
                                    • 综上所述,如果AOF已经开启了,那么用AOF来恢复是比较合理的方式,但是如果AOF关闭了,那么RDB虽然数据不是很实时,但是也能恢复部分数据,完全取决于RDB是什么时候备份的。当然RDB并不是一无是处,它 的恢复速度要比AOF快很多,但是总体来说对于flush操作之后不是最好的恢复数据源

                                    四、从节点有什么变化

                                      • Redis从节点同步了主节点的flush命令,所以从节点的数据也是被清除了,从节点的RDB和AOF的变化与主节点没有任何区别

                                      五、快速恢复数据

                                        • 下面使用AOF作为数据源进行恢复演练
                                        • 1)防止AOF重写。快速修改Redis主从的auto-aof-rewrite-percentage和 auto-aof-rewrite-min-size变为一个很大的值,从而防止了AOF重写的发生, 例如:
                                        config set auto-aof-rewrite-percentage 1000
                                        config set auto-aof-rewrite-min-size 100000000000

                                        image.gif

                                          • 2)去掉主从AOF文件中的flush相关内容:
                                          flushall

                                          image.gif

                                            • 3)重启Redis主节点服务器,恢复数据

                                            六、总结

                                              • 本文通过flush误操作的数据恢复,重新梳理了持久化、复制的相关知识,这里建议运维人员提前准备shell脚本或者其他自动化的方式处理,因为故障不等人,对于flush这样的危险操作,应该通过有效的方式进行规避。
                                              相关实践学习
                                              基于Redis实现在线游戏积分排行榜
                                              本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
                                              云数据库 Redis 版使用教程
                                              云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
                                              相关文章
                                              |
                                              7月前
                                              |
                                              NoSQL 算法 关系型数据库
                                              Redis宕机了,如何恢复数据
                                              Redis持久化是为了防止服务宕机导致内存中数据丢失。主要有两种策略:RDB(快照)和AOF(仅追加文件)。RDB在指定时间间隔生成数据集快照,保存到磁盘,通过fork子进程实现,避免阻塞主线程,但可能丢失部分数据。AOF记录每次写操作,实时写回磁盘,提供秒级数据丢失保障,可通过不同同步策略平衡性能和安全性。AOF文件可定期重写以优化空间效率。混合使用RDB和AOF能在数据安全性和恢复速度上找到平衡。
                                              100 1
                                              |
                                              NoSQL 数据管理 Redis
                                              Redis数据闪回: 任意时间点秒级恢复数据-1
                                              Redis数据闪回: 任意时间点秒级恢复数据-1
                                              449 0
                                              |
                                              2月前
                                              |
                                              存储 缓存 NoSQL
                                              数据的存储--Redis缓存存储(一)
                                              数据的存储--Redis缓存存储(一)
                                              95 1
                                              |
                                              2月前
                                              |
                                              存储 缓存 NoSQL
                                              数据的存储--Redis缓存存储(二)
                                              数据的存储--Redis缓存存储(二)
                                              51 2
                                              数据的存储--Redis缓存存储(二)
                                              |
                                              2月前
                                              |
                                              消息中间件 缓存 NoSQL
                                              Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
                                              【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
                                              78 6
                                              |
                                              2月前
                                              |
                                              缓存 NoSQL 关系型数据库
                                              redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿
                                              本文深入探讨了Redis缓存的相关知识,包括缓存的概念、使用场景、可能出现的问题(缓存预热、缓存穿透、缓存雪崩、缓存击穿)及其解决方案。
                                              199 0
                                              redis和缓存及相关问题和解决办法 什么是缓存预热、缓存穿透、缓存雪崩、缓存击穿
                                              |
                                              27天前
                                              |
                                              缓存 NoSQL 关系型数据库
                                              大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
                                              本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
                                              大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
                                              |
                                              28天前
                                              |
                                              存储 缓存 NoSQL
                                              【赵渝强老师】基于Redis的旁路缓存架构
                                              本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
                                              【赵渝强老师】基于Redis的旁路缓存架构
                                              |
                                              1月前
                                              |
                                              缓存 NoSQL Redis
                                              Redis 缓存使用的实践
                                              《Redis缓存最佳实践指南》涵盖缓存更新策略、缓存击穿防护、大key处理和性能优化。包括Cache Aside Pattern、Write Through、分布式锁、大key拆分和批量操作等技术,帮助你在项目中高效使用Redis缓存。
                                              195 22
                                              |
                                              21天前
                                              |
                                              缓存 NoSQL PHP
                                              Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
                                              本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
                                              36 5

                                              相关产品

                                            • 云数据库 Tair(兼容 Redis)