Redis企业级数据备份与恢复方案
一、持久化配置
RBD和AOF建议同时打开(Redis4.0之后支持)
RDB做冷备,AOF做数据恢复(数据更可靠)
RDB采取默认配置即可,AOF推荐采取everysec每秒策略
AOF和RDB还不懂的,请转移到如下几篇:
看完这篇还不懂Redis的RDB持久化,你们来打我!
天天在用Redis,那你对Redis的AOF持久化到底了解多少呢?
二、数据备份方案
1、需求
我们需要定时备份rdb文件来做冷备,为什么?不是有aof和rbd了吗为什么还要单独写定时任务去备份?因为Redis的aof和rdb是仅仅有一个最新的,比如谁手贱再Redis宕机的时候执行rm -rf aof/rdb
了,那不就GG了吗?或者rdb/aof文件损坏了等不可预期的情况。所以我们需要单独备份rdb文件以防万一。
为什么不定时备份aof而是rdb?定时备份aof没意义呀,定时本身就是冷备份,不是实时的,rdb文件又小恢复又快,她哪里不香?
2、方案
写crontab定时调度脚本去做数据备份。
每小时都copy一份redis的rdb文件到一个其他目录中,这个目录里的rdb文件仅仅保留48小时内的。也就是每小时都做备份,保留2天内的rdb,只保留48个rdb。
每天0点0分copy一份redis的rdb文件到一个其他目录中,这个保留一个月的。也就是按天备份。
每天半夜找个时间将当前服务上的所有rdb备份都上传到云服务上。
3、实现
3.1、按小时
每小时copy一次备份,删除48小时前的数据。
crontab -e
# 每小时都执行/usr/local/redis/copy/redis_rdb_copy_hourly.sh脚本
0 * * * * sh /usr/local/redis/copy/redis_rdb_copy_hourly.sh# redis_rdb_copy_hourly.sh脚本的内容如下:#!/bin/sh
# +%Y%m%d%k == 年月日时
cur_date=`date +%Y%m%d%k`
rm -rf /usr/local/redis/rdb/$cur_date
mkdir /usr/local/redis/rdb/$cur_date
# 拷贝rdb到目录
cp /var/redis/6379/dump.rdb /usr/local/redis/rdb/$cur_date
# date -d -48hour +%Y%m%d%k == 48小时前的日期,比如今天2020060214,这个结果就是2020053114
del_date=`date -d -48hour +%Y%m%d%k`
# 删除48小时之前的目录
rm -rf /usr/local/redis/rdb/$del_date
3.2、按天
每天copy一次备份,删除一个月前的数据。
crontab -e
# 每天0点0分开始执行/usr/local/redis/copy/redis_rdb_copy_daily.sh脚本
0 0 * * * sh /usr/local/redis/copy/redis_rdb_copy_daily.sh# redis_rdb_copy_daily.sh脚本的内容如下:#!/bin/sh
# 年月日
cur_date=`date +%Y%m%d`
rm -rf /usr/local/redis/rdb/$cur_date
mkdir /usr/local/redis/rdb/$cur_date
# 拷贝rdb到目录
cp /var/redis/6379/dump.rdb /usr/local/redis/rdb/$cur_date# 获取一个月前的时间,比如今天是20200602,那么del_date就是20200502
del_date=`date -d -1month +%Y%m%d`
# 删除一个月前的数据
rm -rf /usr/local/redis/rdb/$del_date
3.3、传到云
没法演示,最终目的就是磁盘备份完上传到云,云保留多少天等策略自己看需求。
三、数据恢复方案
1、redis挂了
如果仅仅是redis进程挂了,那么直接重启redis进程即可,Redis会按照持久化配置直接基于持久化文件进行恢复数据。
如果有AOF则按照AOF,AOF和RDB一起开的话也走AOF。
2、持久化文件丢了
如果持久化文件(rdb/aof)损坏了,或者直接丢失了。那么就要采取我们上面所做的rdb备份来进行恢复了。
不要脑子一热想着很简单,就以为直接把rdb拖过来重启redis进程就完事了,这种想法有很多问题。慢慢道来。
2.1、问题
问题一:直接把备份的rdb扔到redis持久化目录下然后重启redis不行的原因在于:redis是按照先aof后rdb进行恢复的,所以都是开启aof的,redis启动后会重新生成新的aof文件,里面是空的。所以不会进行任何数据恢复,也就是说虽然你把rdb丢给redis了,但是redis会按照aof来恢复,而aof是redis启动的时候新生成的空文件,所以不会有任何数据进行恢复。
问题二:那么我们把rdb文件丢给redis后,先将redis的aof关闭再启动redis进程不就能按照rdb来进行恢复了吗?是这样的,没毛病!但是新的问题来了,我们aof肯定要开的,aof对数据保障更可靠。那什么我们按照rdb文件恢复完后再修改redis配置文件开启aof然后重启redis进程不就得了嘛?大哥…你打开aof然后重启redis,这时候redis又会生成一个空的aof文件,这时候恢复的时候又是啥数据都没了。
因为数据是存到内存里,你重启后肯定没了,需要持久化文件来恢复。这时候aof是空的,我恢复个鸡毛啊。
2.2、具体方案
可能有人想到方案了,但是耐心看完,看看我的文采如何。
我不管你是持久化文件丢了还是坏了,我都先rm -rf *
给他删了。
停止redis进程
删除坏掉的rdb和aof持久化文件。
修改配置文件关闭redis的aof持久化。
找到最新备份的rdb文件扔到redis的持久化目录里。(这里最新的肯定是按照小时备份的最后一个)
启动Redis进程
执行
set appendonly yes
动态打开aof持久化。
也就是说打开aof的操作不是修改配置文件然后重启,而是先热修改让他生成aof,这次生成肯定是会带着内存中完整的数据的。然后再修改配置文件重启。
等aof文件生成后再修改redis配置文件打开aof。
重启redis进程。
完美收官。
END
精彩推荐
一百期Java面试题汇总
SpringBoot内容聚合
IntelliJ IDEA内容聚合
Mybatis内容聚合
我知道你 “在看”
Redis企业级数据备份与恢复方案相关推荐
- Redis集群CentOS系统配置企业级数据备份方案以及数据恢复的操作(在开启AOF功能下恢复冷备RDB文件数据,保持AOF和RDB双开情况下恢复数据及错误的数据恢复步骤详解)
1. 设置每小时保存一份 /var/redis/6379/dump.rdb 文件至指定目录(我这边存放在 /usr/local/redis_backup 目录下),并删除48小时前的文件. 为 ...
- 如何部署建筑行业数据备份与恢复方案?
中国十九冶集团有限公司成立于1966年,是世界500强中国五矿旗下骨干子企业,是所属单位中唯一承担过冶金工程全流程施工的综合型建筑企业.主营建筑工程.装备制造.地产开发等业务,涵盖规划.设计.投资.施 ...
- redis的数据持久化方案
Redis的持久化方案有两种 1.Rdb方式:快照形式,定期将内存中的数据持久化到硬盘.是Redis默认的数据持久化的形式. Rdb:缺点是:数据还没有更新到磁盘上,突然断电,造成数据的不完整性. 在 ...
- 新一代企业级大数据应用方案
摘要:本文的整理自2017云栖大会-成都峰会上阿里云资深专家张辉的分享讲义,讲义主要由大数据时代大数据方案的三个思考引出大数据时代企业数据应用架构:由数据模型层到计算模型层到接口层.随后介绍了OLT- ...
- 计算机备份与恢复教案,15数据备份与恢复(教案)
15数据备份与恢复(教案) (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 实训项目15?数据备份与恢复一. 实训题目:数据备份与恢复二 ...
- 把数据用活,阿里云定义云原生企业级数据湖3.0
随着数字经济加速推动了各个行业的数字化进程,以及5G商用所带来云计算.通信.大数据.人工智能等多项技术融合催生出更多的数据湖应用场景.IDC预测,到2025年,中国大数据市场规模将达到250亿美金.作 ...
- Java中高级核心知识全面解析——Redis(集群【概述{主从复制、哨兵、集群化}、数据分区方案、节点通信机制、数据结构简析】)5
目录 一.[集群]入门实践教程 1.Redis 集群概述 1)Redis 主从复制 2)Redis 哨兵 3)Redis 集群化 2.主从复制 1)主从复制主要的作用 2)快速体验 ①.第一步:本地启 ...
- Day267.预约系统的性能瓶颈、营销活动无缝切换秒杀活动、预约系统数据迁移方案、高流量下预约系统搭建熔断机制、预约系统redis集群主从哨兵架构 -Redis的高并发预约抢购系统
一.预约系统的性能瓶颈 1.预约系统应对热门爆品时的缺陷 用户进行预约会涉及到两个维度的数据变更一个是用户信息,一个是SKU信息,如图↓所示: 正常来说这么搞一点问题没有,即便涉及到写数据库,但是每个 ...
- Redis 数据持久化方案
作为内存数据库,Redis 在数据存储与读取上的速度是毫不逊色的,这点毋庸置疑.但是对于内存来说,断电或遇到故障后数据就会丢失,这却是一个无法回避的问题.令人欣慰的是,基于这样的缺点,Redis 也提 ...
最新文章
- js 事件函数中的参数带换行符或换行标签都不能起作用的解决方法
- Spring 系列: Spring 框架简介
- java设计模式---适配器模式
- .Net 获取日期所属于一年中的第几周
- 记事本java代码_java实现Windows记事本(示例代码)
- 云原生一体化数仓发布
- 【翻译】针对多种设备定制Ext JS 5应用程序
- [译]使用asp.net mvc 的工具提示
- Linux学习总结(66)——CentOS7操作系统SSH安全加固
- disBalancer(DDOS)将于4月15日在DuckSTARTER进行IDO
- VMware Linux VDI 安装步骤
- 微软推补丁服务器,微软再推稳定性补丁 为即将到来功能更新做准备
- 如何使用记事本和cmd执行java代码
- 如何建设数据中台:精益数据创新体系
- 【旺铺2012分享】导航CSS代码使用修改技巧!
- Android平台压缩纹理ETC2 VS ASTC
- 小程序:canvas绘制网络图片
- canvas生成gif图
- cmd中为什么看不到python安装成功_cmd中运行python怎么切换目录? 怎么查看python中已安装的包...
- 作为阿里的面试官,我有话想说。
热门文章
- 这就是华为Mate 30 Pro真机了,价格或许要高攀不起了?
- 你认识的老罗又回来了!罗永浩:我的创造力才刚刚开始猥琐发育
- 阿里巴巴北京总部鸟瞰图曝光:今天又是想去阿里上班的一天!
- 继腾讯后 B站又获阿里投资!加速二次元电商商业化
- 女员工采购电影票抽中黄金 老板:必须上交 不上交就开除
- 在Vmware下linux与ARM开发板的NFS系统搭建【ZT】
- html怎么移动到vue,vue自定义指令之拖动页面的元素
- anaconda版本选择_Python环境搭建之Anaconda快速学习
- 充电桩前端对接的一点总结
- php 解析返回的xml,php解析cas返回的xml解决思路