redis使用rdb文件无法恢复数据

1.情况说明

1)我使用docker部署的redis容器(单节点),由于服务器资源缩减,要将单独部署在服务器上的redis迁移到其他服务器上
(2)源服务器192.168.1.5,目标服务器192.168.1.63)redis版本 6.0.124)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

 

posted @ 2024-12-06 11:44  Leonardo-li  阅读(10)  评论(0编辑  收藏  举报