1. 设置每小时保存一份 /var/redis/6379/dump.rdb 文件至指定目录(我这边存放在 /usr/local/redis_backup 目录下),并删除48小时前的文件。

    为了后面能够定时执行该数据备份任务,我们在 /usr/local/redis_backup 目录下创建一个rdb_backup.sh脚本文件,内容如下。

#!/bin/sh# date +%Y%m%d%H 是CentOS的时间用法,得到年月日时,如2021040708,
# 更完整的有 date +%Y%m%d%H%M%S%Z
cur_date=`date +%Y%m%d%H`# $cur_date使用变量值。这边先移除当前时间段的目录
rm -rf /usr/local/redis_backup/$cur_date
mkdir /usr/local/redis_backup/$cur_date
# 备份rdb文件
cp /var/redis/6379/dump.rdb /usr/local/redis_backup/$cur_date# 删除48小时前备份的rdb文件
del_date=`date -d -48hour +%Y%m%d%H`
rm -rf /usr/local/redis_backup/$del_date

2. 这边我们先直接手动执行该sh脚本文件,先赋予文件执行权限,并执行,如下。

3. 同理,我们再创建一个rdb_backup_daily.sh脚本用于每天保存一份rdb文件,并且仅仅保留最近一个月的文件,脚本代码如下。

#!/bin/sh# 这边不用再加上小时了
cur_date=`date +%Y%m%d`
rm -rf /usr/local/redis_backup/$cur_date
mkdir /usr/local/redis_backup/$cur_date
cp /var/redis/6379/dump.rdb /usr/local/redis_backup/$cur_date# 这边也不用加上小时,并且改为一个月
del_date=`date -d -1month +%Y%m%d`
rm -rf /usr/local/redis_backup/$del_date

4. 最后,我们使用crontab定时执行文件备份脚本文件,在终端输入 crontab -e 后输入如下内容,然后 :wq 保存退出即可。

0 * * * * sh /usr/local/redis_backup/rdb_backup.sh
0 0 * * * sh /usr/local/redis_backup/rdb_backup_daily.sh

退出后有如下提示信息,网上的意思有没安装crontab,也有说是没有执行select-editor选择编辑器。

但是我们 crontab -l 指令可以看到我们的定时任务 ,所以提示没有问题,暂时忽略。

5. 数据恢复方案

5. 1 如果是redis进程被结束或者主机宕机了,那么重启后,可根据aof文件直接数据恢复。因为aof文件是append-only方式,所以即使损坏,也只是后期加入的数据有问题,那么可以使用 redis安装目录/src/redis-check-aof --fix 将有损坏的数据指令删除,直至其它指令正常,此时aof文件可正常执行。

5.2 如果是aof或rdb文件完全损坏不可用或者丢失,需要使用备份文件来恢复数据,错误恢复数据操作如下图。

5.3 上图展示了错误的数据恢复操作,为什么会造成上面的错误呢?原因是开启aof后,Redis只从aof备份文件恢复数据,如果找不到aof文件,那么就利用Redis的数据创建aof文件,而不会从rdb中读取数据恢复,等到我们进行相应操作或者将Redis服务shutdown后,Redis会将缓存中的空数据保存至aof和rdb文件(覆盖我们拷贝过来的rdb文件),也就解释了上图为什么我们关闭Redis服务后,aof和rdb文件中内容都为空。所以正确的设置Redis从rdb文件恢复数据的操作如下:

5.3.1 先关闭Redis服务(如果还在运行),通过 redis-cli shutdown 指令关闭redis服务,通过指令 ps -ef | grep redis 查看Redis是否关闭。

5.3.2 暂时关闭conf文件中的aof功能,先通过 vi /etc/redis/6379.conf 指令打开配置文件,然后设置 appendonly 为 no ,操作如下。

5.3.3 拷贝一份rdb文件至 /var/redis/6379 目录下,并确认该备份文件有相关数据,如下。

5.3.4 进入 /etc/init.d 目录,通过 ./redis_6379 start 指令启动Redis服务,并查看相关数据成功,如下。

5.3.5 注意:此时如果直接redis-cli shutdown(安全退出模式,会保存rdb文件,不保存aof文件),然后手动修改配置文件打开aof配置,再启动Redis服务,你会发现又获取不到数据了。

5.3.6 为什么又会获取不到数据呢?还是因为我们开启aof功能后,Redis又从aof备份文件恢复数据,但是没有找到aof文件,那么直接基于Redis内存数据创建aof文件,内存为空,之后保存的备份文件也为空,因此后续重启Redis服务也得不到数据。所以在执行完5.3.4步骤后,我们在确认Redis从rdb备份文件恢复数据后,直接在redis终端通过 config set appendonly yes 进行热修改,打开aof备份功能,然后Redis数据就能写入aof文件中。缺点是热修改的配置参数没有被持久化修改,但是此时aof文件已经保存了Redis数据,我们可以关闭redis,然后修改配置文件,设置 appendonly 为 yes,进行aof备份功能的持久化配置,最后重启redis从aof备份文件恢复数据即可。

Redis集群CentOS系统配置企业级数据备份方案以及数据恢复的操作(在开启AOF功能下恢复冷备RDB文件数据,保持AOF和RDB双开情况下恢复数据及错误的数据恢复步骤详解)相关推荐

  1. java实现for文件删除_Java 添加、删除、替换、格式化Word中的文本的步骤详解(基于Spire.Cloud.SDK for Java)...

    Spire.Cloud.SDK for Java提供了TextRangesApi接口可通过addTextRange()添加文本.deleteTextRange()删除文本.updateTextRang ...

  2. Redis 集群规范(中文稿)(MOVED错误码及ASK错误码

    引言? 这个文档是正在开发中的 Redis 集群功能的规范(specification)文档,文档分为两个部分: 第一部分介绍目前已经在 unstable 分支中实现了的那些功能. 第二部分介绍目前仍 ...

  3. Redis 集群规范(MOVED错误码及ASK错误码)

    引言? 这个文档是正在开发中的 Redis 集群功能的规范(specification)文档,文档分为两个部分: 第一部分介绍目前已经在 unstable 分支中实现了的那些功能. 第二部分介绍目前仍 ...

  4. 二十一Redis集群

    Redis 的集群 Redis 的复制特性,以及 Redis Sentinel 和 twemproxy 这两个程 序,其中:复制特性可以创建指定服务器的复制品,这些复制品可以用于扩展系统处理读请求的能 ...

  5. Java中高级核心知识全面解析——Redis(集群【概述{主从复制、哨兵、集群化}、数据分区方案、节点通信机制、数据结构简析】)5

    目录 一.[集群]入门实践教程 1.Redis 集群概述 1)Redis 主从复制 2)Redis 哨兵 3)Redis 集群化 2.主从复制 1)主从复制主要的作用 2)快速体验 ①.第一步:本地启 ...

  6. 错过血亏!深入学习Redis集群搭建方案及实现原理

    我们知道 Redis 的这几种高可用技术:持久化.主从复制和哨兵,但这些方案仍有不足,其中最主要的问题是存储能力受单机限制,以及无法实现写操作的负载均衡. 11.16-17日,北京市东三环中路61号富 ...

  7. redis指定配置文件启动_深入学习 Redis 集群搭建方案及实现原理

    " 在前面的文章中已经介绍了 本文将详细介绍集群,主要内容包括: 集群的作用 集群的搭建方法及设计方案 集群的基本原理 客户端访问集群的方法 实践须知(集群伸缩.故障转移.参数优化等) 集群 ...

  8. Redis集群搭建-韩国庆

    认真一步一步搭建下来,就可以成功.... Redis-cluster集群架构讲解 redis集群专业名词称之为Redis-cluster,redis集群是从3.0版本以后才有的概念,也就是说在3.0之 ...

  9. Kubernetes学习总结(16)—— Kubernetes 实战之部署 Redis 集群

    一.问题分析 本质上来说在 k8s 上部署一个 redis 集群和部署一个普通应用没有什么太大的区别,但需要注意下面几个问题: Redis 是一个有状态应用:这是部署 redis 集群时我们最需要注意 ...

最新文章

  1. 别盲目调参!深度学习要先找到最佳策略
  2. 详解Android动画之Frame Animation
  3. python画三维立体图-如何在论文中画出漂亮的插图?
  4. 作用域和闭包的通俗理解
  5. 第4章 maven依赖特性
  6. HttpWebRequest类
  7. linux 使用rpm卸载软件的使用方法
  8. mysql java 查寻用户_mysql 查询不同用户 最新的一条记录
  9. Linux系统镜像下载(centOS-7)教程
  10. 计算机有自带的编程软件吗,cmd打开电脑自带软件
  11. Python 正则提取字符串中的地区
  12. 三菱或尝试抛弃后视镜,使用摄像头和AI技术来导航
  13. Python实现回归树
  14. #华为模拟器eNSP
  15. sja1000 中断_[转载]SJA1000的错误中断处理
  16. Android--百度地图学习笔记(二)--167错误、定位到非洲
  17. 【Android】Intent传递数据量过大的问题android.os.TransactionTooLargeException
  18. matlab的自定义常数是a,Simulink仿真入门到精通(二) Simulink模块
  19. 计算机网络实验四访问控制列表NAT应用
  20. netbox怎么用?

热门文章

  1. 详解边缘计算:为何而起、优势如何、哪些玩家以及正在爆发的场景
  2. 在让元宇宙“圆梦”这条路上,交互技术卡在哪里了?
  3. “腾讯看点”打响信息流的全面战争
  4. 知识付费为何从一个“圈粉”的事业变成一个“骗粉”的勾当?
  5. webpack把源代码里面的console和debugger全部去掉_在webpack中,module、chunk和bundle到底是什么样的存在?...
  6. python random.choice报错_如何解决mtrand.RandomState.choice中的内存错误...
  7. python grpc 并发_用Python进行gRPC接口测试(二)
  8. 对象属性的调用_面向对象的三主线之一:Java类及类的成员(1)
  9. cos html cache插件,关于Cos-Html-Cache插件不能创建首页缓存的解决办法
  10. python基础教程: __del__() 清空对象