脚本备份,例如每小时一个rdb日志文件,我们在/usr/local/redis/目录下创建一个脚本redis_rdb_copy_daily.sh,我们将生成的rdb日志文件以日期命名,在/usr/local/snapshotting目录下存放的是日志文件,下列日志中的cur_date是当前小时的文件夹,我们将其删掉,重新创建一个当前小时命名的文件夹,将redis生成的rdb日志文件拷贝到该目录下,然后将48小时之前的日志删掉
#!//bin/sh
cur_date=`date +%Y%m%d%k`
rm -rf /usr/local/redis/snapshotting/$cur_date
mkdir -p /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
通过crontab定时器执行备份脚本:
使用命令crontab -e打开定时器文件,在其中加上执行时间的任务:
[root@newname etc]# cat crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
##############################
0 * * * * sh /usr/local/redis/copy/redis-rdb-copy-hourly.sh
这样有了定时器就会每小时执行一份备份,当我们redis意外停止,数据丢失时,可以通过最新的备份恢复数据
数据恢复方案
a.如果是redis进程挂掉,那么重启redis进程即可,直接基于AOF日志文件恢复数据
b.如果是redis进程所在机器挂掉,那么重启机器后,尝试重启redis进程,尝试直接基于AOF日志文件进行数据恢复
c.如果redis当前最新的AOF和RDB文件出现了丢失/损坏,那么可以尝试基于该机器上当前的某个最新的RDB数据副本进行数据恢复
①停止redis(命令是redis-cli shutdown),
②在配置文件中关闭aof: appendonly no
③拷贝rdb日志备份到/var/redis/6379目录下
④启动redis(命令是,先到目录/etc/init.d/目录下, ./redis_6379)
⑤尝试get一个key,确认数据恢复
⑥命令热修改redis配置,使用redis-cli连接redis,使用命令redis config set appendonly yes打开aof方式,这样aof和rdb数据就一致了
⑦手动修改6379.conf配置文件中appendonly为yes,因为热修改暂时不会写到配置文件中,所以需要手动修改,然后启动redis,再次确认数据恢复
d.如果当前机器上的所有RDB文件全部损坏,那么从远程的云服务上拉取最新的RDB快照回来恢复数据
e.如果是发现有重大的数据错误,就找最新的并且无错的进行恢复
一般RDB用来做冷备,AOF做热备