企业级持久化配置

RDB配置按配置文件默认,可以根据项目数据量的大小,调整save 60 10000这个参数
AOF配置开启,aof写日志策略按默认的appendfsync everysec,可以调整auto-aof-rewrite-percentage 100和auto-aof-rewrite-min-size 64mb这两个参数,主要还是auto-aof-rewrite-min-size 64mb根据数据量的大小调整rewrite的策略

企业级数据备份

用RDB做冷备份,定时备份

备份方案
  1. 写crontab定时调度脚本去做数据备份
  2. 每小时copy一份到一个目录中,仅保留48小时的
  3. 每天保留一份当日最新的rdb文件到一个目录中,仅保留1个月的
  4. 每天晚上将当天的所有备份文件,发送到远程服务器上

可以根据自己项目的实际情况,调整备份时间间隔

crontab命令(参考链接)

定时任务的守护进程,相当于闹钟,时间表达式:

*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 7) (星期天 为0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)

# 每月每天每小时的第0分钟执行一次 /bin/ls
# 0 * * * * /bin/ls  
# 在12月内,每天的早上6点到12点,每隔3个小时0分钟执行一次/usr/bin/backup
# 0 6-12/3 * 12 * /usr/bin/backup

crontab [ -u user ] { -l | -r | -e }
-u user 是指设定指定 user 的时程表
-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI
-r : 删除目前的时程表
-l : 列出目前的时程表

备份脚本

将备份脚本放到/usr/local/cron目录下去
redis_backup_rdb_hourly.sh

#!/bin/sh
# 每小时备份脚本
cur_date=`date +%Y%m%d%k`
rm -rf /usr/local/redis/data/redis_6379_backup/$cur_date
mkdir -p /usr/local/redis/data/redis_6379_backup/$cur_date
cp /usr/local/redis/data/redis_6379.rdb /usr/local/redis/data/redis_6379_backup/$cur_date
# 将备份同步到远程服务器上,如亚马孙的S3或阿里云

del_date=`date -d -48hour +%Y%m%d%k`
rm -rf /usr/local/redis/data/redis_6379_backup/$del_date

redis_backup_rdb_daily.sh

#!/bin/sh
# 每天备份脚本
cur_date=`date +%Y%m%d`
rm -rf /usr/local/redis/data/redis_6379_backup/$cur_date
mkdir -p /usr/local/redis/data/redis_6379_backup/$cur_date
cp /usr/local/redis/data/redis_6379.rdb /usr/local/redis/data/redis_6379_backup/$cur_date
# 将备份同步到远程服务器上,如亚马孙的S3或阿里云

del_date=`date -d -1month +%Y%m%d`
rm -rf /usr/local/redis/data/redis_6379_backup/$del_date

添加到定时任务
crontab -e
0 * * * * sh /usr/local/cron/redis_backup_rdb_hourly.sh
0 0 * * * sh /usr/local/cron/redis_backup_rdb_daily.sh

企业级数据恢复

需要做数据恢复的情况

  1. redis的进程挂掉了,直接重启redis,从aof恢复数据
  2. redis进程所在的机器关掉了,重启机器后,再重启redis,从aof恢复数据
  3. redis当前最新的RDB或AOF出现丢失或损坏,比如人为删除
    找到本地数据备份,复制一份到redis的持久化目录,再重启redis。
    如果同时开启rdb和aof时,通过rdb恢复数据时,需要先关闭aof,然后再复制rdb数据文件,最后再启动redis服务,然后热修改配置开启aof,待生成新的aof文件后,再永久修改配置文件开启aof,重启redis。
  4. 本地备份数据文件也全部丢失了,只能从远程拉取最新数据回来
  5. 数据有重大错误,比如上线一小时后发现数据出现重大污染,就可以恢复到一小时前的数据

ps:观看龙果学院中华石杉视频学习笔记