Redis数据导入导出以及数据迁移的4种方法详解
1、aof导入方式。
因为这种方式比较简单,所以我就先介绍它。
分两步来实现,第一步先让源Redis生成AOF数据文件。
#清空上文目标实例全部数据 redis-cli-h目标RedisIP-apasswordflushall #源实例开启aof功能,将在dir目录下生成appendonly.aof文件 redis-cli-h源RedisIP-apasswordconfigsetappendonlyyes
dir目录,可以通过configgetdir目录获得。
configgetdir #比如我的Mac上执行上面的命令后,返回如下内容 1)"dir" 2)"/usr/local/var/db/redis"
通过上面的命令,我们可以看到我本地的dir目录是:/usr/local/var/db/redis。
现在我们来做第二步操作,让目标Redis实例导入aof数据。
#将appendonly.aof文件放在当前路径下 redis-cli-h目标RedisIp-apassword--pipe上面的第一个命令,执行后,如果出现以下内容,则表示导入aof数据成功。
Alldatatransferred.Waitingforthelastreply... Lastreplyreceivedfromserver. errors:0,replies:5我这里是测试,数据比较少,所以提示有5个导入成功了。
AOF的缺点也很明显,就是速度慢,并且如果内容多的话,文件也比较大。而且开启AOF后,QPS会比RDB模式写的QPS低。还有就是AOF是一个定时任务,可能会出现数据丢失的情况。
2、通过我的xttblog_redis_mv.sh脚本来实现。
我的脚本内容如下:
#!/bin/bash #redis源ip src_ip=192.168.1.4 #redis源port src_port=6379 #redis目的ip dest_ip=127.0.0.1 #redis目的port dest_port=6389 #要迁移的key前缀 key_prefix= i=1 redis-cli-h$src_ip-p$src_port-apasswordkeys"${key_prefix}*"|whilereadkey do redis-cli-h$dest_ip-p$dest_port-apassworddel$key redis-cli-h$src_ip-p$src_port-apassword--rawdump$key|perl-pe'chompifeof'|redis-cli-h$dest_ip-p$dest_port-apassword-xrestore$key0 echo"$imigratekey$key" ((i++)) done大家在使用的时候,只需要替换IP即可。
这个脚本同样有一个问题就是使用了keys*,然后一个一个遍历,如果是生产环境,不建议这样使用!当然我的脚本也是可以再进行优化的!
3、使用redis-dump工具。
Redis-Dump是一个用于Redis数据导入/导出的工具,是基于Ruby实现的,可以方便的进行redis的数据备份。这个工具需要先安装,以我的Mac为例,安装教程如下:
#没安装ruby的话,先安装ruby brewinstallruby #移除gem自带源 gemsources--removehttps://rubygems.org/ #添加淘宝源 gemsources-ahttps://ruby.taobao.org/ #安装redis-dump geminstallredis-dump-V目前我发现,淘宝的镜像已经出现badresponseNotFound404了,被告知镜像维护站点已迁往RubyChina镜像。
#替换镜像地址 gemsources--addhttp://gems.ruby-china.org/--removehttp://rubygems.org/ #确认镜像地址是否替换成功 gemsources-l #替换成功后再安装redis-dump geminstallredis-dump-V安装完成后,就可以使用redis-dump工具进行数据的导入导出了!
#redis-dump导出 redis-dump-u:password@源RedisIp:6379>源Redis数据文件.json #redis-load导入 cat源Redis数据文件.json|redis-load-u:password@目标RedisIp:6379cat源Redis数据文件.json|redis-load-u:password@目标RedisIp:6379
Linux系统或者Window系统也都类似,安装redis-dump工具完成后直接使用redis-dump导出,redis-load导入即可完成数据的备份与迁移。
redis-dump工具很强大,建议大家到官网上多看看它的官方文档。
4、rdb文件迁移
redis-dump麻烦就麻烦在需要进行安装,如果我的Redis已经有备份机制,比如有rdb文件,那么我们直接迁移rdb文件就可以达到同样的目的。
首先,我们可以先关闭源Redis实例的aof功能。如果不关闭aof,Redis默认用aof文件来恢复数据。
#源实例关闭aof功能 redis-cli-h源RedisIp-apasswordconfigsetappendonlyno然后使用save命令把数据固化到rdb文件中。
#固化数据到RDB文件 savesave完成后,还是通过configgetdir命令获得保存的RDB数据文件位置。
接下来,我们需要杀死redis进程。杀掉当前redis的进程,否则下一步的复制rdb文件,rdb处于打开的状态,复制的文件,会占用同样的句柄。
kill-9redis #或者 pkill-9redis #或者手段关闭Redis服务然后复制源redis的rdb文件到目标Redis的dir数据目录,名字为你要迁移的redis的rdb文件名。
复制完成后,重启目标Redis实例,数据就迁移完成了。重启完成后可以验证一下数据是否成功的复制了。
更多关于Redis数据导入导出以及数据迁移的方法请查看下面的相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。