使用rdb文件進行redis數據遷移--python腳本


查找了一些redis遷移的方法,一般做法就是

1. 從源數據庫把rdb文件保存,然后傳到新的主機上,啟動新的redis即可

2. 把新的redis當做源數據庫的slave,同步數據

今天開發提了一個測試需求,要求把一個備份的rdb文件數據保存到另一個redis(110主機)的15號庫中(默認的是0),這樣就不會影響redis(110主機)原有的數據。我在網上找了一個python,實現了這個功能。下面是原文:

------------------------------------------

原文鏈接:http://www.cnblogs.com/lesliefang/p/4711204.html

老大讓把 一台機器上 redis 中所有的數據,遷移到另一台機器上
查了一下可以拷貝 rdb 文件, 此方法只適用於遷移到一個新的庫, 遷移到正在使用的庫就不行了, 而且 rdb 里面是所有的 db, 你只想遷移某一個 db 也是不行的。
設置 master  slave 也是可以的, 數據會自動同步,也很簡單
最笨最容易想到的方法當然是寫個腳本,從原庫中讀出所有數據,寫入到另外一個庫中,如下:

 

# coding=utf-8 import redis redis_from = redis.StrictRedis(host='127.0.0.1', port=6379, db=10) redis_to = redis.StrictRedis(host='127.0.0.1', port=6379, db=0) if __name__ == '__main__': cnt = 0 for k in redis_from.keys(): data_type = redis_from.type(k) if data_type == 'string': v = redis_from.get(k) redis_to.set(k, v) elif data_type == 'list': values = redis_from.lrange(k, 0, -1) redis_to.lpush(k, values) elif data_type == 'set': values = redis_from.smembers(k) redis_to.sadd(k, values) elif data_type == 'hash': keys = redis_from.hkeys(k) for key in keys: value = redis_from.hget(k, key) redis_to.hset(k, key, value) else: print 'not known type' cnt = cnt + 1 print 'total', cnt

現在有rdb文件,測試用redis(100),想要遷移rdb中數據到redis(110)的15號db中,而且不影響原有數據。進行如下操作

 

100:

1. 安裝python,python的redis擴展

2. 將rdb文件放到redis-100的數據文件夾下,啟動之后redis-100上就有了rdb的備份數據

3. 確認110重啟之后,修改腳本文件中的redis_from和redis_to變量信息,運行腳本。

4. 等待腳本運行完成,到110上確認數據遷移完畢。

 

110:

1. 去掉認證設置

2. 重啟redis

-------

最笨也許最好用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM