4

redis持久化之RDB - Bensoco

 1 year ago
source link: https://www.cnblogs.com/chaodahao/p/17393777.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

1. 什么是RDB:

RDB(Redis DataBase):RDB 持久性以指定的时间间隔执行数据集的时间点快照。
说人话:实现类似照片记录效果的方式,把某一时刻的数据和状态以文件的形式写到磁盘上,也就是快照,恢复时再将硬盘快照文件直接读回到内存里。
这样一来,即使故障宕机,快照文件也不会丢失,数据的可靠性也就得到了保证。这个快照文件就称为RDB文件(dump.rdb)。

2. 修改配置文件:

2.1 查询redis7原始配置文件:
2977305-20230512112721296-1572892365.png

要注意的一点是redis7相比于redis6在快照的时间间隔上和修改频次是变化较大的

2977305-20230512113342373-708215841.png
2.2 将时间间隔和频次修改为5秒2次:

2977305-20230512113714666-422264237.png

2.3 修改rdb文件的保存路径已经文件名(方便自己查找):

默认路径为:/usr/local/redis
2977305-20230512114200313-1985854044.png
修改为:
2977305-20230512114835228-117399162.png

注意:这里修改路径可能会出现问题:
2977305-20230512120219479-634055123.png

解决方法是dir /myredis/dumpfiles 改成 dir ./myredis/dumpfiles

默认文件名:
2977305-20230512114924246-259743629.png
修改为:
2977305-20230512115017592-1573051302.png
修改成功:

2977305-20230512120744593-1540083192.png

3. 触发备份:

3.1 自动触发:

5秒钟修改2次自动触发(两个条件都要满足,即时间间隔大于等于5秒,修改次数大于等于2次
2977305-20230512121201565-390526095.png

2977305-20230512121239054-673256441.png
3.2 备份恢复:

在启动服务时,redis自动根据rdb文件进行备份。
有两种特殊情况,当执行flushall/flushdb(这种情况生成的rdb文件即为空,没有意义)或者退出客户端,redis自动会生成一个当下最新的rdb文件。
具体实践参考https://www.bilibili.com/video/BV13R4y1v7sP?p=31&vd_source=a579082d717747b1e99fe189207e7c29

注意:不可以把备份文件dump.rdb和生产redis服务器放在同一台机器,必须分开各自存储,以防生产机物理损坏后备份文件也挂了。
3.3 手动触发:
两个命令:save(线上生产禁用)和bgsave(默认)

save在主程序中执行会阻塞当前redis服务器直到持久化工作完成,执行save命令期间,redis不能处理其他命令,非常严重的问题,线上禁止使用
bgsave命令会在后台异步进行快照操作,这个操作是fork(即产生一个和父进程完全相同的子进程)出一个子进程在后台完成的不阻塞,快照同时还可以响应客户端请求。

4. RDB的优势与缺点:

4.1 优势:

1)适合大规模的数据恢复
2)适合按照业务定时备份
3)对数据完整性和一致性不高
4)RDB文件在内存中的加载速度比AOF快得多

4.2 缺点:

1)在一定时间间隔内做备份,如果redis意外发生宕机,如断电,则会丢失当前至最近一次快照之间的数据
具体实践参考https://www.bilibili.com/video/BV13R4y1v7sP?p=33&vd_source=a579082d717747b1e99fe189207e7c29
2)RDB需要经常fork出一个子进程在磁盘上持久化,如果数据量很大则会导致I/O严重影响服务器性能

5. 检查修复dump.rdb文件:

在rdb文件迁移或者写入过程中都有可能发生数据损坏,这些数据损坏很可能使整个rdb文件不可用,所以需要尝试检查并修复。
先进入/usr/local/redis/bin,使用里面的redis-check-rdb进行rdb文件检查修复:

2977305-20230512155653487-1019120435.png

修复成功:

2977305-20230512155722616-804479304.png

如果修复不了,那只能自认倒霉了。。。

6. RDB快照禁用:

1)redis-cli set save ""
2) 修改配置文件:save 5 2 --> save "" (推荐)


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK