redis数据备份方案

1.RDB的生成策略用默认的配置就可以。
2.AOF一定要打开 选择 everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
就是当前AOF文件大小是上次AOF文件大小的两倍,并且AOF文件大于64M 才执行rewrite操作

数据备份方案
(1)写一个crontab定时去调度脚本去做数据备份
(2)每小时都copy一份当时的rdb文件,到一个目录中。仅仅保留48小时的备份。
(3)每天都备份一份当天的rdb文件,到一个目录中。仅仅保留最近一个月的备份。
(4)每次copy备份之前都把太久的备份删掉。
(5)每天将当前服务器的备份保存下来,例如保存到阿里云。

每小时备份:
redis-rdb-hour.sh

#!/bin/sh
cur_date=`date +%Y%m%d%k`   #当前时间精确到小时
rm -rf /usr/local/bin/redis/snapshotting/$cur_date   #删除当前时间的目录
mkdir /usr/local/bin/redis/snapshotting/$cur_date  #新建当前时间的目录
cp /usr/local/bin/dump.rdb /usr/local/bin/redis/snapshotting/$cur_date   #将rdb文件copy到当前时间创建的目录
del_date=`date -d -48hour +%Y%m%d%k`   ##48小时之前的时间
rm -rf /usr/local/bin/redis/snapshotting/$del_date   #删除48小时之前的目录

chmod 777 redis-rdb-hour.sh

执行命令:crontab -e

* */1 * * * sh /usr/local/bin/redis-rdb-hour.sh #每小时执行脚本

每天备份:
redis-rdb-day.sh

#!/bin/sh
cur_date=`date +%Y%m%d`  #当前时间精确到天
rm -rf /usr/local/bin/redis/snapshotting/$cur_date   #删除当前时间的目录
mkdir /usr/local/bin/redis/snapshotting/$cur_date  #新建当前时间的目录
cp /usr/local/bin/dump.rdb /usr/local/bin/redis/snapshotting/$cur_date   ##将rdb文件copy到当前时间创建的目录
del_date=`date -d -1month +%Y%m%d`  #一个月之前的时间
rm -rf /usr/local/bin/redis/snapshotting/$del_date   #删除一个月之前的目录

chmod 777 redis-rdb-day.sh
执行命令:crontab -e

0 0 * * * sh /usr/local/bin/redis-rdb-day.sh #每天0点执行脚本

数据恢复方案:
(1)如果redis进程挂掉,那么重启redis即可,直接基于AOF日志文件恢复数据
(2)如果redis中的RDB和AOF文件都丢失(可能认为原因)

停止redis进程
找到最新一小时RDB文件copy到redis存入rdb文件目录


redis数据备份方案_第1张图片
image.png

并且将redis.conf 中的appendonly yes 改为no
重启redis,数据恢复。
这个时候使用redis的热修改 将 appendonly no 改为yes .
停掉redis,将redis.conf 中的appendonly no改为yes
重启redis 数据彻底恢复。

你可能感兴趣的:(redis数据备份方案)