Redis数据库的dump备份与aof备份
来源:互联网 发布:流程梳理,优化建议书 编辑:程序博客网 时间:2024/05/22 00:31
Redis自动备份有两种方式,第一种是通过dump.rdb文件实现备份,另外一种使用aof文件实现自动备份。
Dump.rdb备份
Redis中默认使用dump.rdb文件实现备份,如果aof备份没有打开,那么启动redis时,会默认从dump.rbd文件中读取原始数据.
如何配置dump.rdb备份,在redis.conf文件中有命令:
save 900 1save 300 10save 60 10000
它代表的意思是dump备份的条件,在900s内有一个key发生改变/300s中有10个key发生改变/60s内有10000个key发生改变时,redis将将当前数据库快照到dump.rdb文件中。
也可以执行命令来实现手动备份
SAVE
SAVE命令表示使用主进程将当前数据库快照到dump文件
BGSAVE
BGSAVE命令表示,主进程会fork一个子进程来进行快照备份。
两者的不同是,前者会阻塞主进程,而后者不会,所以一般使用BGSAVE进行手动备份。
redis快照到dump文件时,会先生成一个temp.rdb文件,然后重命名为dump.rdb文件替换原来文件实现备份。
redis.conf中的
dbfilename dump.rdb //修改dump文件名称dir ./ //修改dump文件的文件路径
aof文件备份
redis默认关闭了aof文件备份,redis.conf文件中找到
appendonly no
把no改为yes
appendfilename appendonly.aof
可以修改默认的aof文件名
appendfsync everysec
这里默认的everysec会在安全和效率之间权衡,redis默认会每隔1s就调用fsync函数,将缓冲区的数据写到磁盘里面,但是当fsync函数执行时间超过1s时,redis会适当延迟写操作。当appendfsync设置为always时,redis会针对每一个写操作都刷新到磁盘,这样虽然安全,但是性能会有所降低。当设置为no时,redis不会主动对数据进行备份,这时什么时候刷新备份,就依赖于操作系统的设置了。
Aof bgrewriteaof操作
aof文件备份,会备份数据库的历史记录,以及相应执行过的指令,相当于一个log文件,在恢复数据库的时候会回滚执行命令,同时恢复数据。这样带来的一个问题就是,aof文件会越来越大,如果有一百条指令,最后一条指令恢复的最终数据库,那么前99条指令及相应的数据也会存在在aof文件中。如何解决的这个问题呢?
可以执行命令:
bgrewriteaof
就会把当前数据库刷新到aof文件中,此时aof文件中将只会保存当前数据库的数据,所以如果数据库被入侵清空,请谨慎执行这个命令,因为它会数据库上的历史数据消失。
redis也会自动调用bgwriteaof操作:
auto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mb
这里的设置针对redis自动进行rewriteaof操作。percentage是指,当redis当前的aof文件大小相对于上一次进行rewriteaof操作时的大小增长率大于100%时,就会进行rewrite,这里可以自己设置。
但是,当增长率大于了100%,实际上aof文件其实很小,这样rewrite就没有必要了,所以,还需要设置一个min-size,当redis的增长率大于100%,并且min-size的大于64mb时,就会执行rewriteaof操作。
如果想关闭rewriteaof操作,可以将percentage设置为0。
redis会在以下三个时候进行rewrite操作
- Redis接收到客户端发送的bgrewriteaof命令
- Redis aof文件增长率和增长大小达到auto-aof-rewrite
- Redis接收到客户端发送的”CONFIG SET appendonly yes”命令
aof与dump备份不同
aof文件备份与dump文件备份不同。dump文件的编码格式和存储格式与数据库一致,而且dump文件中备份的是数据库的当前快照,意思就是,不管数据之前什么样,只要BGSAVE了,dump文件就会刷新成当前数据库数据。
当redis重启时,会按照以下优先级进行启动:
- 如果只配置AOF,重启时加载AOF文件恢复数据;
- 如果同时 配置了RBD和AOF,启动是只加载AOF文件恢复数据;
- 如果只配置RBD,启动时将加载dump文件恢复数据。
注意:只要配置了aof,但是没有aof文件,这个时候启动的数据库会是空的
在linux环境运行Redis时,如果系统的内存比较小,这个时候自动备份会有可能失败,需要修改系统的vm.overcommit_memory 参数,这个参数是干什么的呢,它有三个选值,是linux系统的内存分配策略:
- 0, 表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。
- 1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何。
- 2, 表示内核允许分配超过所有物理内存和交换空间总和的内存
Redis官方的说明是,建议将vm.overcommit_memory的值修改为1,可以用下面几种方式进行修改:
- (1)编辑/etc/sysctl.conf ,改vm.overcommit_memory=1,然后sysctl -p 使配置文件生效
- (2)sysctl vm.overcommit_memory=1
- (3)echo 1 > /proc/sys/vm/overcommit_memory
参考链接:
有关linux下redis overcommit_memory的问题
Redis的AOF功能
Redis数据备份与恢复
redis的两种备份方式
- Redis数据库的dump备份与aof备份
- Redis--aof备份恢复
- Postgresql的dump数据库备份与还原
- Redis持久化(RDB+AOF)与容灾备份
- redis的dump.rdb备份数据
- Redis数据库的备份与恢复
- redis数据备份的两种机制rdb aof
- 数据库的差异备份与增量备份
- Redis支持的两种持久化备份方式(RDB & AOF)
- 利用redis-dump备份还原数据
- redis中aof备份策略中的配置参数
- Redis的快照与AOF
- Redis的快照与AOF
- Redis的快照与AOF
- 数据库的备份与恢复
- 数据库的备份与恢复
- 数据库的备份与还原:
- 数据库的备份与恢复
- 形象的描述大数据的技术生态以及Hadoop、Hive、Spark 之间关系
- 坑:删除ViewGroup中的一个已经得到焦点的EditText时,同级的第一个EditView会得到焦点
- c++小程序媛常用网站
- Python的hasattr() getattr() setattr() 函数使用方法详解
- XPath总结
- Redis数据库的dump备份与aof备份
- 数据库入门之常用模板汇总
- IE中使用Uploadify文件上传插件报错: SCRIPT5007: 缺少对象
- 史上最全的ReactNative视频
- 2017.1.10 算法测试题集 - 1002 - 相等二叉树
- 史上最大DDoS攻击的本质与防范
- 多线程-1、NSThread
- 时间处理的工具类
- Deep learning 的一点点笔记