redis数据转移随笔
生产环境有一批版本比较老的redis主从架构,是一主多从,版本是2.8
由于想迁移到阿里云上,那么问题来了,怎么把redis数据转移到阿里云上
为了省事,阿里云也是和生产环境一样的版本,架构也一致,其实剩下的就好办了,把数据导出,再导入就行了
我们生产环境使用了aof和rdb两种持久化,好处是不怕意外的数据丢失
那么问题来了,怎么导入到阿里云
导出简单,首先在生产环境的redis的主节点执行bgsave,执行后将fork出新的子进程,不会阻塞redis,等完成后,把rdb文件拷贝出来,放到阿里云
先停止阿里云的主节点的redis, 把rdb文件放到阿里云主节点的数据文件夹下面,然后启动redis,然后,没数据,一看rdb文件没了,被重新创建了
这是怎么回事,想了好久才明白,由于同时开启aof和rdb持久化,优先使用aof恢复数据,由于没有aof,所以先创建aof然后再创建RDB那么数据肯定是没了,那这怎么办法呢?
既然这样,就先关闭aof,在配置文件里 appendonly yes 注释掉
然后关闭redis,再解压缩rdb文件,再启动redis,看下info有数据了,不错,然后关闭redis,打开aof持久化,启动redis,一看数据又没了,这可咋办
想了想应该还是aof优先的缘故,由于没有aof就创建aof然后清空RDB了,又回到了上面的问题
那么既然这样的话,就动态打开aof
先注释掉配置文件里的aof
解压缩RDB,启动redis,好了数据有了
然后我们动态打开aof
config set appendonly yes
然后去数据文件夹下看,已经开始产生aof文件了,等文件生成完毕,我们可以shutdown redis
然后打开配置文件中的appendonly yes 这次,rdb和aof都正常了,其实最后的rdb是重新生成的,从aof生成的
注释掉aof - 导入rdb-动态打开aof-生成aof-关闭redis-打开配置文件注释aof-redis从aof从新生成rdb
至此,数据迁移完成,主从数据也正常了
参考了以下解决方案