天天看點

redis 備份和恢複 :redis-dump安裝與導出redis資料

! 下面的工具适合于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:

# 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 ‘[email protected]/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 後面可以寫登陸密碼

redis-dump -u :[email protected]: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 ‘[email protected]/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?:[email protected]:6379`