备份方案

1、 写crontab定时调度脚本去做数据备份;
2、每小时copy一份rdb的备份到一个目录中去,仅仅保留最近48小时的备份;
3、每天保留一份当日的rdb的备份到一个目录中去,仅仅保留最近1个月的备份;
4、每次copy备份的时候,都把太旧的备份删除;
5、每天晚上将当前服务器上的所有数据备份,发送一份到远程的云服务器上去。

  1. crontab -e
  2. f1 f2 f3 f4 f5
  3. * * * * *
  4. - - - - -
  5. | | | | |
  6. | | | | +----- 星期中星期几 (0 - 6) (星期天 0)
  7. | | | +---------- 月份 (1 - 12)
  8. | | +--------------- 一个月中的第几天 (1 - 31)
  9. | +-------------------- 小时 (0 - 23)
  10. +------------------------- 分钟 (0 - 59)

定时脚本

每小时copy一次,删除48小时前的数据

  1. crontab -e
  2. 0 * * * * sh /usr/local/redis/copy/redis_rdb_copy_hourly.sh
  1. redis_rdb_copy_hourly.sh
  2. #!/bin/sh
  3. cur_date=`date +%Y%m%d%k`
  4. rm -rf /usr/local/redis/snapshotting/$cur_date
  5. mkdir /usr/local/redis/snapshotting/$cur_date
  6. cp /var/redis/6379/dump.rdb /usr/local/redis/snapshotting/$cur_date
  7. del_date=`date -d -48hour +%Y%m%d%k`
  8. rm -rf /usr/local/redis/snapshotting/$del_date

每天copy一次,删除上个月前的数据

  1. crontab -e
  2. 0 0 * * * sh /usr/local/redis/copy/redis_rdb_copy_daily.sh
  1. redis_rdb_copy_daily.sh
  2. #!/bin/sh
  3. cur_date=`date +%Y%m%d`
  4. rm -rf /usr/local/redis/snapshotting/$cur_date
  5. mkdir /usr/local/redis/snapshotting/$cur_date
  6. cp /var/redis/6379/dump.rdb /usr/local/redis/snapshotting/$cur_date
  7. del_date=`date -d -1month +%Y%m%d`
  8. 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数据副本进行数据恢复。