持久化方案
注意事项
aof 破损修复
- 在 redis append 数据到 AOF 文件出现错误,会导致 AOF 文件破损
redis-check-aof --fix
使用工具来来修复破损的AOF文件
aof 和 rdb 同时工作
- redis 自己触发的 RDB snapshotting 操作和 AOF rewrite 操作不会同时执行就不会执行 RDB snapshotting
- 如果 RDB 在执行 snapshotting ,此时用户执行 BGREWRITEAOF 命令,那么用户触发的 AOF rewrite 操作会堵塞到 RDB快照 生成之后执行
持久化故障恢复过程
- 默认
redis 启动
存在 AOF? —-存在—-> 加载 AOF -> 启动成功或失败
| ^
不存在 |
| |
存在 RDB? ——-存在——> 加载 RDB————|
| |
不存在 |
| |
—————————————————————-
- 开启了混合持久化(aof-use-rdb-preamble),直接读取 appendonly.aof 进行数据重放 反正也是优先 aof 数据重放
容灾备份方案
RDB非常适合做冷备,每次生成之后,就不会再有修改了
数据备份方案
(1)写crontab定时调度脚本去做数据备份
(2)每小时都copy一份rdb的备份,到一个目录中去,仅仅保留最近48小时的备份
(3)每天都保留一份当日的rdb的备份,到一个目录中去,仅仅保留最近1个月的备份
(4)每次copy备份的时候,都把太旧的备份给删了
(5)每天晚上将当前服务器上所有的数据备份,发送一份到远程的云服务上去
每小时copy一次备份,删除48小时前的数据
crontab
crontab 编辑定时任务
crontab -e
内容, 每小时执行一次任务
0 sh /usr/local/redis/copy/redis_rdb_copy_hourly.sh
shell 脚本
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
crontab 编辑
crontab -e
内容,每天执行一次脚本
0 0 * sh /usr/local/redis/copy/redis_rdb_copy_daily.sh
shell 脚本
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
每天一次将所有数据上传一次到远程的云服务器上去
- todo