redis數據導入導出

在2017年,項目上的redis集羣需要從2.8版本更換爲3.2版本,此時涉及到redis數據key的遷移,經百度、×××,發現有三種方法可以實現
1、第三方工具redis-dump、redis-load實現
2、通過aof機制導入導出,需要開啓aof功能
3、通過rdb存儲機制遷移數據,此方法最爲簡單,直接dump $key、restore $key即可

此篇主要介紹第一種方式,redis-dump、redis-load實現redis的數據導入導出,直接進入主題

   redis-dump,要求ruby版本>=2.2.2 

第一步:安裝依賴的服務包(gcc服務包可用CentOS自帶源即可)

  yum install ruby rubygems ruby-devel gcc -y 

第二步:配置ruby官網源

   gem sources -a http://gems.ruby-china.org/   ##將國內的源添加至本地
   gem source -l  ##查看ruby源
   gem source --remove http://rubygems.org/  ##去掉對外源,如果使用rubygems源需×××
   gem source -l  ##覈實ruby源 

第三步:gem安裝redis-dump

   gem install redis-dump -V   ##redis-dump,執行此步很慢,以下操作基本均略慢,鏡像都爲copy國外源
        ERROR:  Error installing redis-dump:redis requires Ruby version >= 2.2.2.
            gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3  ##安裝rvm命令  略慢
                                gpg: key D39DC0E3: public key "Michal Papis (RVM signing) <[email protected]>" imported
                                gpg: no ultimately trusted keys found
                                gpg: Total number processed: 1
                                gpg:  imported: 1  (RSA: 1)    ##出現類似信息,獲取key成功
           curl -L get.rvm.io | bash -s stable  ##執行此命令時,需要對配置google DNS /etc/resolv.conf nameserver 8.8.8.8(我也不知道爲什麼要配置8.8.8.8,但是他就是成功了)
             rvm list known  ##查看服務ruby所有版本,如果執行失敗,執行"source /etc/profile.d/rvm.sh"
             echo "export rvm_max_time_flag=20" >> ~/.rvmrc(此步根據提示操作)
             rvm install 2.3.3  ##安裝ruby2.3.3版本,此過程下載時間極慢
             rvm use 2.3.3 --default  ##設置ruby最新版本爲
             rvm remove 2.0.0   ##卸載舊版本,隨後再此安裝redis-dump

第四步:確認redis-dump安裝成功

  find / -iname redis-dump  ##確認redis-dump安裝成功
  /usr/local/rvm/gems/ruby-2.3.3/wrappers/redis-dump
  /usr/local/rvm/gems/ruby-2.3.3/gems/redis-dump-0.4.0/bin/redis-dump
  /usr/local/rvm/gems/ruby-2.3.3/bin/redis-dump
 ##相關參數可用help查看,這裏不做詳解

第五步:測試(https://github.com/delano/redis-dump)

  數據備份:##redis-dump備份出來的數據格式都是json格式
    redis-dump -a 123456 -u 10.111.132.168:9736 > /tmp/wtc.json
    more wtc.json
      {"db":0,"key":"LMS:0930115529001000512619-18800074594","ttl":-1,"type":"string","value":"AQA=","size":4}
      {"db":0,"key":"LMS:0607225238001000808201-18800487249","ttl":-1,"type":"string","value":"AQA=","size":4}
      {"db":0,"key":"LMS:0930103825001000502800-18800031090","ttl":-1,"type":"string","value":"AQA=","size":4}
      {"db":0,"key":"LMS:0606193159001000503202-18800444032","ttl":-1,"type":"string","value":"AQABAA==","size":8}
      {"db":0,"key":"LMS:0930122140001000517332-18800198151","ttl":-1,"type":"string","value":"AQA=","size":4}
      {"db":0,"key":"LMS:0606151834001000801439-18800188730","ttl":-1,"type":"string","value":"AQEBAA==","size":8}
      {"db":0,"key":"LMS:0930103607001000502525-18800457188","ttl":-1,"type":"string","value":"AQA=","size":4}
      {"db":0,"key":"LMS:0606190129001000501706-18800345537","ttl":-1,"type":"string","value":"AQEBAA==","size":8}
      {"db":0,"key":"LMS:0930113721001000509873-18800167485","ttl":-1,"type":"string","value":"AQA=","size":4}
      {"db":0,"key":"LMS:0930125722001000523748-18800320602","ttl":-1,"type":"string","value":"AQA=","size":4}
      {"db":0,"key":"LMS:0606192506001000502796-18800478597","ttl":-1,"type":"string","value":"AQEBAA==","size":8}

  數據恢復:
    < 160.json  redis-load -u 10.111.132.176:9736 -a wtc.com
    < /root/161.json  redis-load -u 10.111.132.173:19000 -a wtc.com    

    redis-load
                 < db_full.json redis-load
                 $ < db_db15.json redis-load -d 15
       # OR
                 $ < cat db_full | redis-load
                 $ < cat db_db15.json | redis-load -d 15
以上就是藉助第三方工具來做redis數據遷移,但是需要注意一下幾點

1、每個key都在相同或者不同的solt區間中,而每個solt都是基於proxy計算方式的來,遷移時需要確認proxy計算方式有咩有改變(我是不知道怎麼計算的,都是通過主節點導出,在通過proxy導入)

2、暫時沒發現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章