踩坑之路——Redis迁移遇到的一路坑
坑点
redis-Docker 里面没有redis.conf ?
redis 从 rdb 无缝切换到 aof 备份方式
redis 迁移命令
1. Redis-Docker
里面没有 redis.conf
需求是,公司要上云,把之前的机房的redis迁移到云redis。阿里的数据库redis版只支持aof方式,而公司之前的redis用的是rdb,所以首先需要把 rdb
转换成 aof
,所以需要改 redis.conf
的 appendonly
的选项,但是在docker中查找,没有发现conf 文件,一番检查发现,使用的官方 redis docker 的 dockefile
中是这样写的。
RUN mkdir /data && chown redis:redis /data
VOLUME /data
WORKDIR /data
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 6379
CMD ["redis-server"]
怀疑是当时run的时候参数不对,或者是后来被删除了,正确的run 方法
docker run -d -it \
-p 6379:6379 \ -v /path to redis.conf:/etc/redis/redis.conf \ -v /expose path data:/data \ --restart always \ --name some_redis \ redis-server /etc/redis/redis.conf
这样就带了conf 进去,同时使用conf 来启动 ,这里要注意,conf 文件中的 daemonize yes
要改为no ,这个参数代表着 redis-server
会 运行在后台,docker 会自动退出 。conf文件可以从其他地方copy一份过来.
这里有很多解决方案,如果你想重新跑一个新的容器,你需要先将 rdb.dump 文件 copy 到容器外面。如果你不想重新跑一个新的容器, 你也可以直接在之前的reids容器里面创建配置文件。
2. redis 从 rdb 无缝切换到 aof 备份方式
既然 redis.conf
文件的问题解决了,就可以开始考虑开启aof 生成 appendonly.aof
文件,然后提交给远端redis服务器就好了,思路很简单,这里就不描述我没有找到正确方法之前的一堆狗屎操作了,直接贴上正确的步骤,很简单:
//在docker 内执行 redis-cli 切换到客户端,设置aof 开启,这时候已经有了aof文件了
config set appendonly yes
config set save ""
这样,就有了aof 文件了,这也说明了,这样开启aof 不是增量的,而是所有的数据。
这里做操作之前记得先备份 rdb.dump 文件,以免误操作了,还能恢复数据。如果你的rdb文件是在docker 内的 那么你可以这样来备份。
docker cp <containerId>:/docker-inner/rdb.dump /dokcer-outer/rdb.dump.back
3. redis 迁移命令
接下来两步是针对迁移到 阿里云的云数据库redis,如果只是普通迁移,直接拷贝持久化文件即可。
redis-cli -h <-填写云redis的host地址-> -a <-云redis密码-> --pipe < appendonly.aof
由于云数据库 Redis 版仅支持从阿里云内网访问,所以此操作方案仅在阿里云 ECS 上执行才生效。 若您的 Redis 不在阿里云 ECS 服务器上,您需要将原有的 AOF 文件复制到 ECS 上再执行以上操作。所以这里还需要把aof 从之前的服务器放到 关联的ecs上来执行上面的迁移命令,真是全是坑!
吐槽一下没有运维的坏处,就是作为一只后端狗,搞起来真的很烦啊!!而且日渐感觉到运维的重要性就是,服务了很多下游,其中真的有很多门道,膜拜一下运维大大。还有要吐槽的就是 docker
里面的初识环境一定要记得带上一些基础套件,不然 vim 、ping
什么都没有! ~ 全部需要手动安装,等到用的时候真的想死的心都有了~
最终!redis 上云迁移完成!!~
还没有评论,来说两句吧...