Redis5.0+——持久化——RDB&AOF-创新互联
在redis持久化时,持久化dump.rdb文件放入到redis解压目录下的data目录下的6379目录下
创新互联是一家以网络技术公司,为中小企业提供网站维护、成都网站建设、成都做网站、网站备案、服务器租用、域名注册、软件开发、微信小程序开发等企业互联网相关业务,是一家有着丰富的互联网运营推广经验的科技公司,有着多年的网站建站经验,致力于帮助中小企业在互联网让打出自已的品牌和口碑,让企业在互联网上打开一个面向全国乃至全球的业务窗口:建站沟通电话:189820811082.前期准备1.在redis-5.0.3解压目录下新建data数据目录 2.编辑前面配置的/etc/redis.conf配置文件
修改持久化文件位置
(1) 进入安装redis的目录,新建data文件夹以及端口对应文件夹
[root@VM-16-10-centos redis-5.0.3]# cd /usr/local/redis-5.0.3
[root@VM-16-10-centos redis-5.0.3]# mkdir data
[root@VM-16-10-centos redis-5.0.3]# cd data
[root@VM-16-10-centos redis-5.0.3]# mkdir 6379
(2) 修改拷贝的redis启动配置文件
vim /etc/redis.conf
修改以下配置
logfile "6380.log" #日志文件,默认会存放到配置的dir目录下
# 搜索dir修改dir存放路径
dir /usr/local/redis-5.0.3/data/6379
3.RDB数据持久化RDB(Redis DataBase)快照(snapshot)
在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中。
以下设置会让 Redis 在满足“ 60 秒内有至少有 1000 个键被改动”这一条件时, 自动保存一次数据集:
save 60 1000 //关闭RDB只需要将所有的save保存策略注释掉即可
redis-cli -p 6379 #进入6379端口的redis客户端
127.0.0.1:6379>save # 同步保存,会占用redis的线程
127.0.0.1:6379>bgsave #异步保存,会开启一个子线程
文件生成位置:在顶部配置的dir位置
4.AOF数据持久化以日志的形式来记录每个写操作
每隔一段时间fsync到磁盘, Redis 执行一个改变数据集的命令时(比如 SET), 这个命令就会被追加到 AOF 文件的末尾。
如何开启?修改redis.conf文件
appendonly yes
redis的同步频率设置
appendfsync always # 每次有新命令追加到 AOF 文件时就执行一次 fsync ,非常慢,也非常安全。
appendfsync everysec # 每秒 fsync 一次,足够快,并且在故障时只会丢失 1 秒钟的数据。
appendfsync no # 从不 fsync ,将数据交给操作系统来处理。更快,也更不安全的选择。
文件生成位置:在顶部配置的dir位置和RDB保持一致(默认:dir ./ 生成位置在/usr/local下的bin目录下)
4.1 AOF重写压缩策略# 进行命令
set a a1
set b b1
# 重写过后
set a a1 b b1
AOF文件里可能有太多没用指令,所以AOF会定期根据内存的最新数据生成aof文件
1.redis.conf配置自动重写策略auto-aof-rewrite-min-size 64mb //aof文件至少要达到64M才会自动重写,文件太小恢复速度本来就很快,重写的意义不大
auto-aof-rewrite-percentage 100 //aof文件自上一次重写后文件大小增长了100%则再次触发重写(即128MB会再次触发)
2.手动重写AOF还可以手动重写,进入redis-cli客户端执行命令bgrewriteaof重写AOF
AOF重写redis会fork出一个子进程去做(与bgsave命令类似),不会对redis正常命令处理有太多影响
redis4.0版本后的重写,是指把rdb快照以二进制的形式附在aof头部,作为已有的历史数据,替换掉原来的流水账操作
(1)客户端的请求命令会被append追加到AOF缓存区
(2)AOF缓存区根据AOF持久化策略【always ,everysec ,no】将操作sync同步到磁盘的AOF文件中
(3)AOF文件大小超过重写策略或手动重写时,会对AOF文件rewrite重写,压缩AOF文件容量
系统默认取AOF数据(因为数据不会存在丢失)
4.3 异常恢复若遇到AOF文件损坏,通过
/usr/local/bin/redis-check-aof --fix appendonly.aof # 进行恢复
备份被写坏的AOF文件
恢复:重启redis,然后重写加载
命令 | RDB | AOF |
---|---|---|
启动优先级 | 低 | 高 |
体积 | 小 | 大 |
恢复速度 | 快 | 慢 |
数据安全性 | 容易丢数据 | 根据策略决定 |
开启了混合持久化,AOF在重写时,不再是单纯将内存数据转换为RESP命令写入AOF文件,而是将重写这一刻之前的内存做RDB快照处理,并且将RDB快照内容和增量的AOF修改内存数据的命令存在一起,都写入新的AOF文件,新的文件一开始不叫appendonly.aof,等到重写完新的AOF文件才会进行改名,覆盖原有的AOF文件,完成新旧两个AOF文件的替换。
redis.conf 中配置开启混合持久化(必须先开启aof)
# 修改redis.conf中的以下配置
aof-use-rdb-preamble yes
在 Redis 重启的时候,可以先加载 RDB 的内容,然后再重放增量 AOF 日志就可以完全替代之前的 AOF 全量文件重放,因此重启效率大幅得到提升。
6.通过持久化文件恢复数据在我们持久化文件之后还需要对持久化文件进行备份重命名,此处在持久化目录做出以下配置
[root@VM-16-10-centos 6379]# mv dump.rdb dump.rdb.bak
[root@VM-16-10-centos 6379]# mv appendonly.aof appendonly.aof.bak
恢复数据
注意:在redis被关闭时,redis会自己给我们做一次持久化,重启之后redis内的数据会被清空。当我们关闭redis服务再重写启动时如何获取之前备份的数据。
恢复流程:修改备份数据名称为redis持久化文件名称–>再启动redis服务和客户端
1.此处我们配置的备份数据目录为:/usr/local/redis-5.0.3/data/6379,因此进入该目录
将之前备份的数据文件:
appendonly.aof.bak 改为 appendonly.aof
dump.rdb.bak 改为 dump.rdb
[root@VM-16-10-centos 6379]# cp dump.rdb.bak dump.rdb
[root@VM-16-10-centos 6379]# cp appendonly.aof.bak appendonly.aof
##登录客户端
[root@VM-16-10-centos ~]# redis-server /etc/redis.conf
[root@VM-16-10-centos ~]# redis-cli -p 6379
客户端使用keys *查看数据已经恢复
7.redis定时任务备份数据1.编辑定时任务
[root@VM-16-10-centos ~]# crontab -e
25 2 * * * sh /root/backup.sh # 每天2:25开始执行shell脚本
2.新建定时任务的脚本backup.sh,脚本代码如下
#! /bin/bash
PATH=/usr/local/bin:$PATH
redis-cli -h 127.0.0.1 -p 6379 -a 123456 bgsave
date=$(date +"%Y%m%d")
cp /root/dump.rdb /root/backup/$date.rdb
echo " 备份完成!"
3.查看任务执行日志
tail -f /var/log/cron
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享文章:Redis5.0+——持久化——RDB&AOF-创新互联
标题URL:http://pwwzsj.com/article/dghjde.html