redis使用rdb文件无法恢复数据
1.情况说明
(1)我使用docker部署的redis容器(单节点),由于服务器资源缩减,要将单独部署在服务器上的redis迁移到其他服务器上 (2)源服务器192.168.1.5,目标服务器192.168.1.6 (3)redis版本 6.0.12 (4)docker版本 19.03.8
2.执行步骤
(1)首先在源服务器192.168.1.5上,登陆redis
#登陆redis容器 docker exec -it redis bash #进入redis指定库 redis-cli -h 127.0.0.1 -p 6379 -a 123456 -n 6 #在后台执行数据落盘任务,不影响父进程 bgsave
(2)查看rdb数据保存目录
#进入redis指定库 redis-cli -h 127.0.0.1 -p 6379 -a 123456 -n 6 #查看rdb保存目录 config get dir
(3)进入到指定目录,拷贝rdb文件到目标服务器
如:我的rdb保存目录为/data,rdb文件dump.rdb
(4)在目标服务器(192.168.1.6)上部署好相同版本(6.0.12)的redis容器
(5)在目标服务器(192.168.1.6)进行数据恢复
-
正常恢复步骤:
- 将源服务器192.168.1.5服务器上的dump.rdb拷贝到目标服务器192.168.1.6上rdb存放位置下/data下,重启redis容器即可自动恢复数据
-
遇到的问题:
- 重启redis后,从源redis拷贝过来的dump.rdb被覆盖,有如下两个原因:
- 我开启了aof,数据恢复时,优先恢复aof文件,我的aof没有数据,从而会覆盖rdb的数据
- redis在启动时,会自动创建一个dump.rdb文件,覆盖咱们要恢复数据的dump.rdb文件,导致有数据的rdb文件被覆盖
-
解决方法:
- 关闭aof,如果环境上有要求打开aof,你可以等数据恢复了,然后使用命令临时打开aof,并在redis.conf中打开aof,但千万别重启,等过段时间aof写入数据之后,下次重启就可以直接加载aof或者将数据同时保存到aof,不至于覆盖都市数据
- 恢复rdb数据时,先停掉redis容器(docker stop redis),然后修改redis.conf配置文件中的rdb文件名称,默认是dump.rdb,修改为dumpfile.rdb(文件名自定义),保存之后重启redis容器(docker start redis),就可以将rdb的数据恢复到目标服务器上的redis了
3.参考文档
https://blog.csdn.net/qq_40885034/article/details/116424269?sharetype=blog&shareId=116424269&sharerefer=APP&sharesource=m0_46093787&sharefrom=link