一、概述
1、官网介绍
2、是什么
在指定时间间隔,执行数据集的时间点快照
实现类似照片记录效果的方式,就是把某一时刻的数据和状态以文件的形式写到磁盘上,也就是快照。
这样一来即使故障宕机,快照文件也不会丢失,数据的可靠性也就得到了保证。
这个快照文件就称为RDB文件(dump.rdb),其中,RDB就是Redis DataBase的缩写。
3、能干嘛
在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot内存快照
它恢复时再将硬盘快照文件直接读回到内存里
redis的数据都在内存中,保留备份时它执行的是全量快照,也就是说,把内存中的所有数据都记录到磁盘中,一锅端
rdb保存的是dump.rdb文件
二、案例演示
需求说明
配置文件(6 vs 7)
redis6.0.16以下
redis6.2以及redis7.0.0
操作步骤
自动触发
redis7版本,按照redis.conf里配置的save <seconds> <changes>
本次案例5秒2次修改
修改dump文件保存路径
修改dump文件名称
触发备份
第一种情况
第二种情况
如何恢复
将备份文件(dump.rdb)移动到redis安装目录并启动服务即可
备份成功后故意用flushdb情况redis,看看是否可以恢复数据
执行flushall/flushdb命令也会产生dump.rdb文件,但里面是空的,无意义
物理恢复,一定服务和备份分机隔离
手动触发
save和bgsave
redis提供了两个命令来生成RDB文件,分别是save个bgsave
Save
在主程序中执行会阻塞当前redis服务器,直到持久化工作完成,执行save命令期间,redis不能处理其他命令,线上禁止使用
BGSAVE(默认)
redis会在后台异步进行快照操作,不阻塞
快照同时还可以响应客户端情况,该触发方式会fork一个子进程由子进程复制持久化过程
官网说明
redis会使用bgsave对当前内存中的所有数据做快照
这个操作是子进程在后台完成的,这就允许主进程同时可以修改数据
fork是什么
在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,尽量避免膨胀。
LASTSAVE
可以通过lastsave命令获取最后一次成功执行快照的时间
三、优势和劣势
优势
适合大规模的数据恢复
按照业务定时备份
对数据完整性和一致性要求不高
RDB文件在内存中的加载速度要比AOF快得多
劣势
在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失从当前至最近一次快照期间的数据,快照之间的数据会丢失
内存数据的全量同步,如果数据量太大会导致I/O严重影响服务器性能
RDB依赖于主进程的fork,在更大的数据集中,这可能会导致服务请求的瞬间延迟
fork的时候内存中的数据呗克隆了一份,大致2倍的膨胀性,需要考虑
数据丢失案例
正常录入数据
kill -9故意模拟意外down掉
redis重启恢复,查看数据是否丢失
四、检查修复dump.rdb
五、触发RDB快照
配置文件中默认的快照配置
手动save/bgsave命令
执行flushall/flushdb命令也会产生dump.rdb,但里面是空的,无意义
执行shutdown或者kill(不是kill -9)且没有设置开启AOF持久化
主从复制时,主节点自动触发
六、禁用快照
动态所有停止RDB保存规则的方法
redis-cli config set save ""
快照禁用
七、RDB优化配置项
配置文件SNAPSHOTTING模块
save <seconds> <changes>
dbfilename
dir
stop-writes-on-bgsave-error
rdbcompression
rdbchecksum
rdb-del-sync-files