备份方案
1、 写crontab定时调度脚本去做数据备份;
2、每小时copy一份rdb的备份到一个目录中去,仅仅保留最近48小时的备份;
3、每天保留一份当日的rdb的备份到一个目录中去,仅仅保留最近1个月的备份;
4、每次copy备份的时候,都把太旧的备份删除;
5、每天晚上将当前服务器上的所有数据备份,发送一份到远程的云服务器上去。
crontab -e
f1 f2 f3 f4 f5
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
定时脚本
每小时copy一次,删除48小时前的数据
crontab -e
0 * * * * sh /usr/local/redis/copy/redis_rdb_copy_hourly.sh
redis_rdb_copy_hourly.sh
#!/bin/sh
cur_date=`date +%Y%m%d%k`
rm -rf /usr/local/redis/snapshotting/$cur_date
mkdir /usr/local/redis/snapshotting/$cur_date
cp /var/redis/6379/dump.rdb /usr/local/redis/snapshotting/$cur_date
del_date=`date -d -48hour +%Y%m%d%k`
rm -rf /usr/local/redis/snapshotting/$del_date
每天copy一次,删除上个月前的数据
crontab -e
0 0 * * * sh /usr/local/redis/copy/redis_rdb_copy_daily.sh
redis_rdb_copy_daily.sh
#!/bin/sh
cur_date=`date +%Y%m%d`
rm -rf /usr/local/redis/snapshotting/$cur_date
mkdir /usr/local/redis/snapshotting/$cur_date
cp /var/redis/6379/dump.rdb /usr/local/redis/snapshotting/$cur_date
del_date=`date -d -1month +%Y%m%d`
rm -rf /usr/local/redis/snapshotting/$del_date
数据恢复方案
(1)如果redis进程挂掉,那么重启redis进程即可。redis会自动基于当前的AOF日志文件恢复数据;
(2)如果redis进程所在的机器挂掉,那么重启redis进程,尝试直接基于AOF日志文件进行数据恢复;如果AOF文件存在破损,可以使用命令redis-check-aof fix
进行修复;
(3)如果redis最新的AOF和RDB文件丢失/损坏,可以基于机器备份的最新的RDB数据副本进行数据恢复。