用redis-dump工具对redis集群全部数据进行导出导入

安装redis-dump

redis-dump是基于ruby开发,须要ruby环境,并且新版本的redis-dump要求2.2.2以上的ruby版本,centos中yum只能安装2.0版本的ruby。须要先安装ruby的管理工具rvm安装高版本的rubyredis

安装rvm

可参考官网:http://rvm.io/
执行下列两个命令安装rvm;shell

# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB

# curl -sSL https://get.rvm.io | bash -s stable

# find / -name rvm -print
/usr/local/rvm
/usr/local/rvm/scripts/rvm
/usr/local/rvm/bin/rvm
/usr/local/rvm/src/rvm
/usr/local/rvm/src/rvm/scripts/rvm
/usr/local/rvm/src/rvm/bin/rvm
/usr/local/rvm/src/rvm/lib/rvm
/usr/local/rvm/lib/rvm

#使rvm生效
source /usr/local/rvm/scripts/rvm

安装ruby

# 查看能够安装的Ruby版本
rvm list known 
# 当前最高的稳定版本是2.5.1
rvm install ruby 2.5.1
#查看ruby版本
ruby --version

安装redis-dump

# 移除gem自带源,国内连不上
gem sources --remove https://rubygems.org/ 
# 添加国内淘宝源
gem sources -a https://ruby.taobao.org/ 
# 安装redis-dump
gem install redis-dump –V

#查看redis-dump版本,安装成功能够开心的备份和还原redis了
redis-dump -v
redis-dump v0.4.0

使用redis-dump导出数据

redis转存储jsonjson

redis-dump -u 127.0.0.1:6378 -a password > redis_6378.json

json还原rediscentos

< redis_6378.json redis-load -u 127.0.0.1 -a password

Redis集群数据导出导入

若是是redis集群模式,须要对集群各个实例分别导出导入,以下所示:ruby

数据导出

命令(redis-dump -u :password@host:port -d 0 > fileName.json)无密码可省略bash

redis-dump -u IP1:6379 -d 0 > 6379.json
redis-dump -u IP2:6380 -d 0 > 6380.json
redis-dump -u IP3:6381 -d 0 > 6381.json

执行完成命令以后,生成3个json文件,即为集群节点数据,为提高导入效率,能够将文件拷贝到目标集群机进行导入,也能够直接在本机导入。curl

数据导入

命令(cat filename.json | redis-load -u :password@host:port -d 0)无密码可省略工具

cat 6379.json | redis-load -u IP4:6379 -d 0
cat 6380.json | redis-load -u IP5:6379 -d 0
cat 6380.json | redis-load -u IP6:6380 -d 0

注意:导入时json文件源集群节点和目的集群节点键所在的槽要对应,若是json的槽不是由导入节点处理的,会报错:提示MOVED 13596 host:porturl

异常处理

执行redis-dump命令时若是报ERR unknown command 'keys'异常.net

缘由:keys命令用于全局查询 通常不建议使用因此能在redis.conf中配置了禁用该命令 。
解决方案: 检查redis.conf 中是否有该命令禁用配置

rename-command FLUSHALL ""  清空全部的库数据
    rename-command FLUSHDB ""      清空当前库数据
    rename-command KEYS ""        查询全部库数据 (由于数据量大时,执行此操做会消耗大量的资源 通常不建议使用该命令)
若是有注释掉便可 !
相关文章
相关标签/搜索