当前位置: 首页 > 科技观察

真枪实弹!Redis“冷备”让你睡个好觉zZ

时间:2023-03-17 19:59:03 科技观察

大家好,我是悟空。Redis的RDB持久化方案相信大家都知道,但是对于企业来说,如果只持久化一个RDB文件,不足以应对生产级的事故。通常的解决方案是对RDB进行多次备份。今天给大家介绍一下RDB的冷备份以及通过RDB进行数据恢复。学会这一招,今晚能不能睡个好觉?企业级冷备方案RedisRDB持久化非常适合企业级冷备方案。这里的冷备份可以理解为将生成的文件拷贝到其他机器上或者云服务器上。RDB适合冷备份的原因是:RDB文件生成后,变化频率较低,除非频繁触发checkpoints导致重新生成。RDB是Redis内存快照,比AOF日志恢复速度快。RDB的生成策略可以自行配置,也可以配置多种配置,可以根据系统的使用场景和实际情况进行设置。备份方案1、使用Linux自带的crontab命令执行定时任务,调用数据备份脚本。2、每小时将最新的RDB快照文件备份到指定目录,只保留最近48小时的备份。3、每天备份最新的RDB快照文件到指定目录,只保留最近一个月的备份。4.每晚将备份文件发送到远程云服务器。流程图如下:每小时备份,首先需要编写数据备份脚本。创建脚本的命令如下:mkdir/usr/local/redismkdir/usr/local/redis/copyvi/usr/local/redis/copy/redis_rdb_copy_hourly.shmkdir/usr/local/redis/snapshottingchmod777/usr/local/redis并编写此脚本文件:#!/bin/shcur_date=`date+%Y%m%d%H`rm-rf/usr/local/redis/snapshotting/$cur_datemkdir/usr/local/redis/snapshotting/$cur_datecp/var/redis/6379/dump.rdb/usr/local/redis/snapshotting/$cur_datedel_date=`date-d-48hour+%Y%m%d`rm-rf/usr/local/redis/snapshotting/$del_date脚本说明:cur_data表示当前时间,精确到小时,如2021080616。删除当前小时的快照文件。为当前小时创建一个备份文件,该文件为空。将当前快照文件复制到上一步创建的空备份文件中。del_date表示48小时前的时间,精确到小时,如2021080416。删除48小时之前的备份文件。设置定时任务,每小时0:00运行脚本:crontab-e0****sh/usr/local.redis/copy/redis_rdb_copy_hourly.sh因为要等到下一个小时0:00,手动运行脚本测试:cd/usr/local/redis/copy./redis_rdb_copy_hourly.sh会在snapshotting文件夹下创建一个目录:2021080809,说明这是2021-08-0809的备份文件夹(注意这个时间为UTC时间)。该目录中还会有一个dump.rdb文件。如下图:每日备份和每小时备份类似,先创建脚本每天备份一次:vi/usr/local/redis/copy/redis_rdb_copy_daily.shchomd777*编写脚本:#!/bin/shcur_date=`date+%Y%m%d`rm-rf/usr/local/redis/snapshotting/$cur_datemkdir/usr/local/redis/snapshotting/$cur_datecp/var/redis/6379/dump.rdb/usr/local/redis/snapshotting/$cur_datedel_date=`date-d-1month+%Y%m%d`rm-rf/usr/local/redis/snapshotting/$del_date创建每日备份定时任务:crontab-e00***sh/usr/local/redis/copy/redis_rdb_copy_daily.sh手动执行备份脚本:cd/usr/local/redis/copy./redis_rdb_copy_daily.sh会在snapshotting文件夹下创建一个目录:20210808,说明这是备份文件夹今天的2021-08-08(注意这个时间是UTC时间)。该目录中还会有一个dump.rdb文件。如下图所示:另外,这些备份建议都上传到云端服务器,多地备份增加了安全感。(后面会介绍云服务同步。)今晚可以睡个好觉了~从备份文件恢复假设一个场景:几个小时前启动的程序污染了Redis的数据,数据是错误的。我应该怎么办?您可以选择较早时间点的备份文件进行恢复。恢复过程停止Redis,暂时关闭AOF的持久化配置。删除AOF日志文件和RDB快照文件。复制RDB快照文件到RedisRDB文件加载目录。重启Redis,确认数据恢复成功。热修改Redis的AOF持久化配置,Redis会将内存中的数据写入AOF文件。再次停止Redis,手动修改配置文件,开启AOF持久化,防止热修改生效。再次重启Redis。本文转载自微信公众号“悟空聊天架构”,可通过以下二维码关注。转载本文请联系悟空聊天架构公众号。