Redis备份01-RDB方式备份

165 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、目标

掌握如何使用rdb的方式备份、了解rdb备份策略、了解如何恢复备份的数据、了解save和bgsave的区别

二、准备工作

1.环境:Centos7.6+Redis5.0.7

2.关于在centos上安装Redis,可以参考另一篇帖子《Centos7笔记之Redis安装》

3.本次redis安装在了用户xredis的家目录下的某个文件夹下,并使用xredis用户启动的redis

三、修改redis全局配置文件,实现RDB备份

1.修改redis全局配置文件(文件具体位置根据自己的实际情况而定)中的备份策略

#进入Redis程序主目录 cd /home/xredis/software/redis-5.0.7 #备份redis的默认全局配置文件 cp /home/xredis/software/redis-5.0.7/redis.conf{,.bak} #修改redis的默认全局配置文件 vim /home/xredis/software/redis-5.0.7/redis.conf ● 注释掉save 900 1 <---##//x注释:900秒内如果redis数据库发生1次改变,就自动使用rdb方式备份数据库 ● 注释掉save 300 10 <---##//x注释:300秒内如果redis数据库发生10次改变,就自动使用rdb方式备份数据库 ● 注释掉save 60 10000 ,并再其下方写两行内容

save 10 1 save 5 2 我们写的这两行的意思是,如果在10秒内发现redis数据库有过改变,那就自动备份一次redis,另外一个是5秒内若发生2次变化就备份一次redis数据库

image.png

2.修改配置文件redis.conf中备份文件的命名规则

● 注释掉【dbfilename dump.rdb】;

● 并在其下方写上一行新内容【dbfilename xdump-redisBAK.rdb】

注释:当rdb备份策略自动备份数据库的时候,自动产生的备份文件的文件名的定义

3.(可选)修改配置文件redis.conf中备份文件的路径

● 注释掉【dir ./】;

● 并在其下方写上一行新内容【dir /redisdata】

注释:指定rdb产生备份文件的存放路径,如果不改的话,rdb备份文件会默认放在redis-server文件所在的目录

image.png

4.(若操作3,本步必做。否则可选)新建rdb备份文件夹

#创建用于存放rdb备份文件的文件夹 mkdir /redisdata #啰嗦:本帖启动redis服务使用的xredis用户,所以要给文件夹赋权限 chown xredis:xredis /redisdata 5.重启redis服务,让配置生效。

su - xredis cd /home/xredis/software/redis-5.0.7/src nohup ./redis-server ../redis.conf & 6.(可略)检验redis是否启动成功

ss -ntl |grep 6379

四、测试往redis数据库里写入数据,检验是否自动备份成rdb文件

1.再开一个shell窗口,便于登录redis的命令行

2.使用redis的客户端登录工具连接到redis数据库

cd /home/xredis/software/redis-5.0.7/src ./redis-cli 3.在redis命令行工具下往redis数据库里加入测试数据

set name1 kahn set age1 18 set name2 songshuer set age2 20 set name3 yiwanka set age3 25 set name4 fanbingbing set age4 30 set name5 liuduoyan set age5 31 4.(扩展)几个用的到的redis命令

keys * #查看所有键 DEL xkey1 #删除一个叫xkey1的键 set xname1 kahn #添加一个叫xname1的键,且值叫kahn config get dir #查看redis的工作目录都有哪些 quit #退出redis-cli命令行程序 shutdown #在redis-cli命令行内关闭redis服务 save #手工立即使用redis主进程执行rdb数据库备份 bgsave #手工立即使用redis子进程备份rdb数据库 5.查看rdb数据库是否自动备份了

ls -sh /redisdata/

多写入点数据,然后写上几条等几秒再去看看备份文件的修改日期就会相应的变化。

如果你10秒或更长时间没有修改过redis数据库,那么备份文件xdump-redisBAK.rdb的修改日期是没有变化的,即说明你不动就不备份数据库。

image.png

五、RDB数据恢复

1.当你重启redis服务时,它会检测配置文件redis.conf中的工作目录,以及工作目录下的指定的rdb备份文件,将自动读取rdb备份文件将其加载到redis内存数据库中。

啰嗦:就是说如果你的工作目录中有对应文件件名的备份文件的话,你想要恢复数据库,只需要重启redis服务即可,它会自动恢复数据库的。

啰嗦:那如何知道自己的工作目录呢?使用redis-cli命令[config get dir]即可看到。

六、总结

1.【SAVE】命令是阻塞主进程,客户端无法连接redis,等SAVE完成后,主进程才开始工作,客户端可以连接。

2.【BGSAVE】命令是fork一个save的子进程,在执行save过程中,不影响主进程,客户端可以正常链接redis,等子进程fork执行save完成后,通知主进程,子进程关闭。

  1. 很明显BGSAVE方式比较适合线上的维护操作。SAVE执行的更快,但会阻塞主进程,更适合业务停止时用,一定要了解清楚两个命令的区别后再谨慎选择。

  2. RDB备份策略十分简单,只需要修改redis.conf中的save部分即可,写上多少秒内执行了几次操作,redis就会自动进行备份了。

  3. RDB的恢复更简单,只要放在备份目录不动它,下次重启redis服务时,自动就恢复了数据库。

---------------ok-------------------------END--------------------2020年7月2日---------------------