! 下面的工具适合于redis 哨兵模式,不适合于redis cluster模式!
在redis cluster模式下,执行redis-dump,会碰到下面的问题。
CROSSSLOT Keys in request don't hash to the same slot redis dump
推荐一个redis cluster下的迁移工具:redis-migrate-tool. 更多的redis dump信息见这篇文章。
这里说下redis-dump的安装和简单使用
一、安装redis-dump
redis-dump安装的时候一般都会遇到下面的错误:
ERROR: Error installing redis-dump:
redis requires Ruby version >= 2.2.2.
所以这里我直接按照解决方案来安装redis-dump.
1、安装rvm:
yum install ruby rubygems ruby-devel -y
gem sources --add http://gems.ruby-china.com/ --remove https://rubygems.org/
[root@docker ~]# gem sources -l
*** CURRENT SOURCES ***
http://gems.ruby-china.com/ #确定只剩这一个
[root@docker ~]# curl -L get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh
rvm -v
# 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/src/rvm
/usr/local/rvm/src/rvm/bin/rvm
/usr/local/rvm/src/rvm/lib/rvm
/usr/local/rvm/src/rvm/scripts/rvm
/usr/local/rvm/bin/rvm
/usr/local/rvm/lib/rvm
/usr/local/rvm/scripts/rvm
2、让rvm生效
source /usr/local/rvm/scripts/rvm
3、安装Ruby
# 查看可以安装的Ruby版本
rvm list known
//输出的例子如下
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.10]
[ruby-]2.3[.8]
[ruby-]2.4[.9]
[ruby-]2.5[.7]
[ruby-]2.6[.5]
[ruby-]2.7[.0]
ruby-head
# for forks use: rvm install ruby-head-<name> --url https://github.com/github/ruby.git --branch 2.2
# JRuby
jruby-1.6[.8]
jruby-1.7[.27]
jruby-9.1[.17.0]
jruby[-9.2.11.1]
jruby-head
# Rubinius
rbx-1[.4.3]
rbx-2.3[.0]
rbx-2.4[.1]
rbx-2[.5.8]
rbx-3[.107]
rbx-4[.12]
rbx-head
# TruffleRuby
truffleruby[-20.0.0]
# Opal
opal
# Minimalistic ruby implementation - ISO 30170:2012
mruby-1.0.0
mruby-1.1.0
mruby-1.2.0
mruby-1.3.0
mruby-1[.4.1]
mruby-2.0.1
mruby-2[.1.0]
mruby[-head]
# Ruby Enterprise Edition
ree-1.8.6
ree[-1.8.7][-2012.02]
# Topaz
topaz
# MagLev
maglev-1.0.0
maglev-1.1[RC1]
maglev[-1.2Alpha4]
maglev-head
# Mac OS X Snow Leopard Or Newer
macruby-0.10
macruby-0.11
macruby[-0.12]
macruby-nightly
macruby-head
# IronRuby
ironruby[-1.1.3]
ironruby-head
# 上面最高的稳定版本是2.7.0,于是就安装它
rvm install ruby 2.7.0
#然后查看ruby版本
ruby --version
4、设置默认ruby
rvm use 2.7.0 --default
5、查看ruby版本
ruby --version
6、安装redis-dump
A) #直接执行下面的命令安装,如果不行,则执行B
gem install redis-dump -V
B) #如果执行A失败,则执行下面的步骤
#移除gem自带源,国内连不上
gem sources --remove https://rubygems.org/
#添加国内淘宝源
gem sources -a https://ruby.taobao.org/
#安装redis-dump
gem install redis-dump –V
C) #查看redis-dump版本
redis-dump -v
//例子输出
redis-dump v0.4.0
二、使用redis-dump导出数据
# redis-dump -h
Try: /usr/local/rvm/gems/ruby-2.3.3/bin/redis-dump show-commands
Usage: /usr/local/rvm/gems/ruby-2.3.3/bin/redis-dump [global options] COMMAND [command options]
-u, --uri=S Redis URI (e.g. redis://hostname[:port])
-d, --database=S Redis database (e.g. -d 15)
-a, --password=S Redis password (e.g. -a 'my@pass/word')
-s, --sleep=S Sleep for S seconds after dumping (for debugging)
-c, --count=S Chunk size (default: 10000)
-f, --filter=S Filter selected keys (passed directly to redis' KEYS command)
-b, --base64 Encode key values as base64 (useful for binary values)
-O, --without_optimizations Disable run time optimizations
-V, --version Display version
-D, --debug
导出指令如下:
-d 指定导出哪个数据库的数据,如果不写则导出所有的,一定要注意数据库名字(这里是 1)前后必须要加空格。
-u 后面可以写登陆密码
scl enable rh-ruby23 bash
redis-dump -u :mypassword@127.0.0.1:6379 -d 1 >test.json
如果没有密码可以不写,如
redis-dump -u 127.0.0.1:6377 -d 1 >test.json
如果直接导出本机端口为6379的可以把 -u 的部分给省去
redis-dump > test.json
三、redis-load导入
# redis-load -help
Usage: /usr/local/rvm/gems/ruby-2.3.3/bin/redis-load [global options] COMMAND [command options]
-u, --uri=S Redis URI (e.g. redis://hostname[:port])
-d, --database=S Redis database (e.g. -d 15)
-a, --password=S Redis password (e.g. -a 'my@pass/word')
-s, --sleep=S Sleep for S seconds after dumping (for debugging)
-b, --base64 Decode key values from base64 (used with redis-dump -b)
# cat test.json | redis-load -u 127.0.0.1:6379
//如果需要认证密码,则使用下面的命令
# cat test.json | redis-load -u :password@127.0.0.1:6379