鲜花网站建设源代码,wordpress 酷炫主题,网站建设 猴王网络0成本,wordpress 获取首页Redis的flushall/flushdb命令可以做数据清除#xff0c;对于Redis的开发和运维人员有一定帮助#xff0c;然而一旦误操作#xff0c;它的破坏性也是很明显的。怎么才能快速恢复数据#xff0c;让损失达到最小呢#xff1f;本文我们将结合之前学习的Redis相关知识进行分析对于Redis的开发和运维人员有一定帮助然而一旦误操作它的破坏性也是很明显的。怎么才能快速恢复数据让损失达到最小呢本文我们将结合之前学习的Redis相关知识进行分析最后给出一个合理的方案注意为了方便说明下文中除了AOF文件中的flushall/flushdb以外其他所有的flushall/flushdb都用flush代替本文假设进行flush操作的Redis是一对主从结构的主节点其中键值对的个数是100万每秒写入量是1000一、缓存与存储被误操作flush后根据当前Redis是缓存还是存储使用策略有所不同缓存对于业务数据的正确性可能造成损失还小一点因为缓存中的数据可以从数据源重新进行构建但是在前面文章介绍了缓存雪崩和缓存穿透的相关知识当前场景也有类似的地方如果业务方并发量很大可能会对 后端数据源造成一定的负载压力这个问题也是不容忽视存储对业务方可能会造成巨大的影响也许flush操作后的数据是重要配置也可能是一些基础数据也可能是业务上的重要一环如果没有提 前做业务降级操作那么最终反馈到用户的应用可能就是报错或者空白页面 等其后果不堪设想。即使做了相应的降级或者容错处理对于用户体验也有一定的影响所以Redis无论作为缓存还是作为存储如何能在flush操作后快速恢复数据才是至关重要的。持久化文件肯定是恢复数据的媒介下面将对AOF和RDB文件进行分析二、借助AOF机制恢复关于AOF语法可以参阅之前我发表的Redis使用篇里关于AOF的介绍Redis执行了flush操作后AOF持久化文件会受到什么影响呢如下所示appendonly no对AOF持久化没有任何影响因为根本就不存在AOF文 件appendonly yes只不过是在AOF文件中追加了一条记录例如下面就是AOF文件中的flush操作记录*1
$8
flushall
虽然Redis中的数据被清除掉了但是AOF文件还保存着flush操作之前完整的数据这对恢复数据是很有帮助的。注意问题如下调大AOF重写参数auto-aof-rewrite-percentage和auto-aof-rewrite-minsize让Redis不能产生AOF自动重写拒绝手动bgrewriteaof1如果发生了AOF重写Redis遍历所有数据库重新生成AOF文件并会覆盖之前的AOF文件。所以如果AOF重写发生了也就意味着之前的数据就丢掉了那么利用AOF文件来恢复的办法就失效了。所以当误操作后需要考虑如下两件事2如果要用AOF文件进行数据恢复那么必须要将AOF文件中的flushall相关操作去掉为了更加安全可以在去掉之后使用redis-check-aof这个工具去检验和修复一下AOF文件确保AOF文件格式正确保证数据恢复正常三、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
2去掉主从AOF文件中的flush相关内容*1
$8
flushall
3重启Redis主节点服务器恢复数据六、总结本文通过flush误操作的数据恢复重新梳理了持久化、复制的相关知识这里建议运维人员提前准备shell脚本或者其他自动化的方式处理因为故障不等人对于flush这样的危险操作应该通过有效的方式进行规避下节将介绍具体的方法