Redis 数据备份还原与主从复制

Redis作为一个内存数据库,在数据安全以及集群部署方面都提供了一系列工具可供使用。


一. Redis数据库数据备份与恢复

Redis是内存型数据库,但是为了数据安全,就需要有“数据持久化“(就是将数据存储在磁盘上)的机制,在备份方面提供了两种工具,分别为RDB和AOF。

1.RDB备份与恢复

RDB是利用快照来实现数据持久化的,当符合特定条件时,redis将会自动的将内存中的数据保存在硬盘上,当redis启动时,会自动的将磁盘上的数据加载到内存中以实现数据环境的恢复。

(1)Redis条件进行RDB备份,步骤如下:
A.修改配置文件redis.conf:

save 900 1    # 900秒内有至少1个键被更改则进行快照
save 300 10   # 300秒内有至少10个键被更改则进行快照
save 60 10000 # 60秒内有至少10000个键被更改则进行快照

dir path #path为redis运行环境时操作的路径
dbfilename rdbname #rdb数据备份文件名(如dump.rdb)

B.重启Redis

注:这种方式的实现是Redis的主线程在条件触发后,fork子进程后,在子进程中完成数据持久化的。

(2)Redis强制进行RDB备份,步骤如下:
在redis-cli中,使用如下命令:

redis-cli>SAVE  #在主进程强制阻塞进行快照备份
或者
redis-cli>BGSAVE  #主进程fork子进程进行快照备份

2.AOF备份与恢复

AOF(append only file)就是通过“将redis执行的每一条指令存储在磁盘文件中“ 以实现数据持久化。

(1)开启AOF功能
默认情况下,Redis是不开启AOF的,要想使用该功能,则在redis.conf中配置:

appendonly yes

AOF文件存放的位置和RDB相同,可以这样设置AOF文件:

dir path #文件存储路径
appendfilename appendonly.aof #aof文件拓展名为aof

AOF的重写配置:

auto-aof-rewrite-percentage 100  # 当目前的AOF文件大小超过上一次重写时的AOF文件大小的百分之多少时会再次进行重写,如果之前没有重写过,则以启动时的AOF文件大小为依据
auto-aof-rewrite-min-size 64mb   # 允许重写的最小AOF文件大小

注意:“重写”并不是对原有aof文件进行重新写入或其它操作,而是对原有指令进行简化,如曾经对list进行三个push:

lpush li_key 1
lpush li_key 2
lpush li_key 3

然后重写的结果就是:

lpush li_key 1 2 3

同理,对HASH table、SET、SORTED SET也是同样的处理方式。
通过重写,就实现了aof文件的压缩;

当然,细心的朋友会发现一个问题,对AOF重写时会影响redis的请求访问的,那么redis是怎么解决的呢?
A. Redis通过fork子进程来完成重写;
B. 重写时在内存中先创建AOF缓存,在重写的同时,将新指令同时写入旧的AOF文件中和AOF缓存中;
C. 重写完成后,将AOF缓存的内容写入磁盘,替换旧的AOF文件

(2)主动强制进行AOF备份

redis-cli> BGREWRITEAOF

二.数据迁移和主从复制

1.直接备份文件数据迁移

Redis的数据迁移比较简单,步骤如下:
(1)关闭目标Redis服务;
(2)将相应的RDB文件或者AOF文件复制过去;
(3)设置REDIS的DIR或者开启AOF功能;
(4)启动目标REDIS服务;

2.主从复制

主服务器配置redis.conf:

bind 127.0.0.1 192.168.1.158 #后面的IP地址为从服务器能访问的主机的ip

从服务器配置redis.conf:

slaveof <masterip> <masterport> #masterip为192.168.1.158 masterport默认是6379

启动主服务器和从服务器

另外:利用主从复制还能够实现数据迁移,将目标redis服务设置成从服务,然后进行数据同步,完成后,就取消主从关系,就完成了数据迁移了。

已标记关键词 清除标记
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质? 你是否想成为一名资深开发人员,想开发别人做不了的高性能程序? 你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹?   那么C++就是你个人能力提升,职业之路进阶的不二之选。 【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。 2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。 3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。 【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署; 2.吊打一切关于C++的笔试面试题; 3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。 【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块 基础篇 本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。 进阶篇 本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。 提升篇: 本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页