Redis数据备份和恢复
1.备份
可以使用SAVE或者BGSAVE命令
SAVE用于创建数据库的备份。(阻塞主进程)
BGSAVE用于在后台创建数据库的备份。(fock了一个专门save的子进程,不会影响主进程)
127.0.0.1:6379> SAVE
OK
127.0.0.1:6379> BGSAVE
Background saving started
2.数据恢复
想要恢复数据的话,需要将备份文件(dump.rdb)移动到redis安装目录并启动服务即可。
获取redis目录可以使用config命令:
127.0.0.1:6379> config get dir
1) "dir"
2) "/data/redis_data”
# 找到目录后,进行查看
[root /]# cd data/redis_data/
[root redis_data]# ll
total 8
-rw-r--r-- 1 root root 709 Jul 15 12:00 appendonly.aof
-rw-r--r-- 1 root root 709 Jul 15 09:03 dump.rdb
备份的RDB文件: 通过命令127.0.0.1:6379> CONFIG GET dir查看执行SAVE命令之后,redis默认存放备份文件的目录;通过命令127.0.0.1:6379> CONFIG GET dbfilename查看备份RDB文件的文件名称.
指定目录: 通过命令redis 127.0.0.1:6379> CONFIG GET dir,得出redis从哪个目录读取备份文件(一般只要直接重启Redis就能恢复数据,因为备份的默认目录和启动读取的目录是同一个)
Ps:学习的过程中遇到一些坑,查了好久才知道为什么
我的操作步骤:
- set一些数据
- 执行save命令
- del一些key
- 重启,发现数据没有恢复
这是因为Redis有自动备份。可以通过config get save进行查看。
127.0.0.1:6379> config get save
1) "save"
2) "3600 1 300 100 60 10000"
# save 900 1 代表900秒内有1个key发生改变就触发save
# save 300 10 代表300秒内有10个key发生改变就触发save
# save 60 10000 代表300秒内有10个key发生改变就触发save
我在执行第三步操作时,改变了1个以上的key的值,并且这个时间正好是Redis自动备份900秒的最后一秒,所以此时Redis又自动备份了一次,dump.rdb覆盖了旧的rdb文件,还原回去,就是del之后的数据了。想要自己备份的话就要关闭自动备份的功能。