真枪实弹!Redis 「冷备」让您睡个安稳觉zZ
大家好,我是悟空呀。
Redis 的 RDB 持久化方案,相信大家都有所了解,但是对于企业来说,如果只是持久化了一个 RDB 文件,不足以应付生产级别的事故。
通常的方案就是对 RDB 进行多个备份,今天带大家来真枪实弹操作下 RDB 的冷备,以及通过 RDB 进行数据恢复。学会了这招,今晚可以好好睡觉了吗?
企业级冷备方案
Redis RDB 持久化是非常适合做企业级的冷备方案的,这里的冷备可以理解为将已生成的文件拷贝到其他机器或者云服务器上。
RDB 适合做冷备的原因如下:
-
RDB 文件生成后,改变的频率低,除非频繁触发检查点导致重新生成。 -
RDB 是 Redis 内存快照,比 AOF 日志恢复速度快。 -
RDB 的生成策略可以自行配置,而且可以配置多项,可以根据系统的使用场景和实际情况进行设置。
备份方案
1、用 Linux 自带的 crontab 命令执行定时任务,调用数据备份脚本。
2、每小时备份一份一次当前最新的 RDB 快照文件到指定目录,只保留最近 48 小时的备份。
3、每天备份一份当前最新的 RDB 快照文件到指定目录,只保留最近一个月的 备份。
4、每天晚上将备份文件都发送远程的云服务器上。
流程图如下所示:
每小时备份
首先需要编写一个脚本,专门用来做数据备份,创建脚本的命令如下:
mkdir /usr/local/redis
mkdir /usr/local/redis/copy
vi /usr/local/redis/copy/redis_rdb_copy_hourly.sh
mkdir /usr/local/redis/snapshotting
chmod 777 /usr/local/redis
然后编写这个脚本文件:
#!/bin/sh
cur_date=`date +%Y%m%d%H`
rm -rf /usr/local/redis/snapshotting/$cur_date
mkdir /usr/local/redis/snapshotting/$cur_date
cp /var/redis/6379/dump.rdb /usr/local/redis/snapshotting/$cur_date
del_date=`date -d -48hour +%Y%m%d`
rm -rf /usr/local/redis/snapshotting/$del_date
脚本解释:
-
cur_data 代表当前时间,精确到小时,比如 2021080616。 -
删除当前小时的快照文件。 -
创建当前小时的备份文件,文件为空的。 -
拷贝当前的快照文件到上一步创建的空的备份文件中。 -
del_date 代表 48 小时以前的时间,精确到小时,比如 2021080416。 -
删除 48 小时以前的备份文件。
设置定时任务,每个小时的 0 分跑一次脚本:
crontab -e
0 * * * * sh /usr/local.redis/copy/redis_rdb_copy_hourly.sh
因为要等到下一个小时的 0 点,所以就手动运行脚本来测试:
cd /usr/local/redis/copy
./redis_rdb_copy_hourly.sh
会在 snapshotting 文件夹创建一个目录:2021080809,表示这是 2021-08-08 09 时的备份文件夹(注意这个时间是 UTC 时间)。这个目录里面还会有一个 dump.rdb 文件。如下图所示:
每天备份
和每小时备份类似,先创建一个每天备份一次的脚本:
vi /usr/local/redis/copy/redis_rdb_copy_daily.sh
chomd 777 *
编写脚本:
#!/bin/sh
cur_date=`date +%Y%m%d`
rm -rf /usr/local/redis/snapshotting/$cur_date
mkdir /usr/local/redis/snapshotting/$cur_date
cp /var/redis/6379/dump.rdb /usr/local/redis/snapshotting/$cur_date
del_date=`date -d -1month +%Y%m%d`
rm -rf /usr/local/redis/snapshotting/$del_date
创建每天备份一次的定时任务:
crontab -e
0 0 * * * 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 快照文件到 Redis 的 RDB 文件加载目录。 -
重启 Redis,确认数据恢复成功。 -
热修改 Redis 的 AOF 持久化配置,Redis 会将内存中的数据写入到 AOF 文件中。 -
再次停止 Redis,手动修改配置文件,打开 AOF 持久化,防止热修改不生效。 -
再次重启 Redis。
- END -
本文分享自微信公众号 - 悟空聊架构(PassJava666)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
还在看几纳米制程?小心被文字游戏忽悠
上个月月末,英特尔进行了“工艺与封装路线”在线直播,同时对工艺路线图进行了更新,原10ESF改名Intel 7,原7nm改名Intel 4,7SF改名Intel 3, 5nm GAA改名Intel 20A。看起来好像和以前没啥变化,就是终于可以不用10nm+++来调侃英特尔的制程了,看起来简单明晰了不少,但细看之下,是不是有种不对劲的感觉?明明还是10nm的实际节点,怎么突然就叫Intel 7了? 事实上,Intel不是第一个这么做的,而且很大程度上来讲,Intel几乎是主流芯片制造商里动作最慢的一批,而屏幕前的你们,实际上已经被忽悠很久了。 即便你不知道CPU的完整工艺,也一定听说过“刻蚀”“光刻”这样的名词,作为集成电路制造过程中最直接体现工艺先进程度的技术,光刻主要是对半导体晶片表面的掩蔽物(如二氧化硅)进行开孔,以便进行杂质的定域扩散的一种加工技术,而且也是最能直接体现工艺先进程度的技术,而光刻技术的分辨率是指光刻系统能分辨和加工的最小尺寸,决定了硅片上形成符合质量规范要求的最小特征图形尺寸。 而我们平日里最关心的纳米制程,用在不同的半导体元件上,又有不同的含义。对CPU来说,...
-
下一篇
🏆「作者推荐」Java技术专题-JVM研究系列(49)JVM分析与调优技巧分析(原理篇)
JVM空间说明 在JDK1.7及以前,HotSpot虚拟机将java类信息、常量池、静态变量、即时编译器编译后的代码等数据,存储在Perm(永久带)里(对于其他虚拟机如BEA JRockit、IBM J9等是不存在永久带概念的),类的元数据和静态变量在类加载的时候被分配到Perm里,当常量池回收或者类被卸载的时候,垃圾收集器会回收这一部分内存,但效果不太理想。 JDK1.8时,HotSpot虚拟机对JVM模型进行了改造,将类元数据放到了本地内存中,将常量池和静态变量放到了Java堆里,HotSpot VM将会为类的元数据明确的分配与释放本地内存,在这种架构下,类元数据就突破了-XX:MaxPermSize的限制,所以此配置已经失效,现在可以使用更多的本地内存。这样一定程度上解决了原来在运行时生成大量的类,从而经常Full GC的问题——如运行时使用反射、代理等。 干货要点 可以发现最明显的一个变化是元空间从虚拟机转移到了本地内存。默认情况下,元数据空间大小仅受限于本地内存,这意味着以后不会因为永久代大小不够而抛出OOM异常了。 jdk1.8以前,HotSpot VM将class和类的j...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL数据库在高并发下的优化方案
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8