一、半持久化RDB模式(默认)
半持久化RDB模式也是Redis备份默认方式,是通过快照(snapshotting)完成的,当符合在Redis.conf配置文件中设置的条件时Redis会自动将内存中的所有数据进行快照并存储在硬盘上,完成数据备份。
Redis进行RDB快照的条件由用户在配置文件中自定义,由两个参数构成:时间和改动的键的个数。当在指定的时间内被更改的键的个数大于指定的数值时就会进行快照。
在配置文件中已经预置了3个条件:
save 900 1 #900秒内有至少1个键被更改则进行快照;
save 300 10 #300秒内有至少10个键被更改则进行快照;
save 60 10000 #60秒内有至少10000个键被更改则进行快照。
Redis 执行 save 命令的时候,将禁止写入命令:
stop-writes-on-bgsave-error yes
这个命令意思是是否对 rbd 文件进行检验,如果是将对 rdb 文件检验。
rdbcompression yes
从 dbfilename 的配置可以知道,rdb 文件实际是 Redis 持久化的数据文件:
dbfilename dump.rdb
二、AOF备份(只需要改appendonly yes即可,其他可以不关心)
如果 appendonly 配置为 no,则不启用 AOF 方式进行备份。如果 appendonly 配置为 yes,则以 AOF 方式备份 Redis 数据,那么此时 Redis 会按照配置,在特定的时候执行追加命令,用以备份数据。
appendonly yes
appendfilename "appendonly.aof"
AOF 文件和 Redis 命令是同步频率的,假设配置为 always,其含义为当 Redis 执行命令的时候,则同时同步到 AOF 文件,这样会使得 Redis 同步刷新 AOF 文件,造成缓慢。而采用 evarysec 则代表每秒同步一次命令到 AOF 文件。默认是everysec。
#appendfsync always
appendfsync everysec
# appendfsync no......
Redis 重写 AOF 文件的条件,默认为 100,表示与上次 rewrite 的 AOF 文件大小相比,当前 AOF 文件增长量超过上次 AOF 文件大小的 100% 时,就会触发 background rewrite。若配置为 0,则会禁用自动 rewrite。
auto-aof-rewrite-percentage 100
触发 rewrite 的AOF文件大小。若AOF文件小于该值,即使当前文件的增量比例达到 auto-aof-rewrite-percentage 的配置值,也不会触发自动 rewrite。即这两个配置项同时满足时,才会触发rewrite。
auto-aof-rewrite-min-size 64mb
Redis 在恢复时会忽略最后一条可能存在问题的指令,默认为 yes。即在 AOF 写入时,可能存在指令写错的问题(突然断电、写了一半),这种情况下 yes 会 log 并继续,而 no 会直接恢复失败。
aof-load-truncated yes
三、数据库恢复
定期复制dump.rdb和appendonly.aof,当数据库挂了,或者需要恢复时,停止服务,将这两个文件的其中一个复制到程序目录,启动服务即可,如果数据库文件配置到了其他位置,同理复制过去就行