2012-08-05 68 views
4

我有一個擁有兩個數據庫的Redis實例。現在我想設置第二個實例並且第一個實例爲replicate,但第二個實例應該只有一個數據庫,並且僅從第一個實例複製db 0。 當我嘗試這樣做(二審設置slaveof ...)我得到了Redis的以下錯誤消息日誌文件:從具有多個數據庫的實例複製單個Redis數據庫

FATAL: Data file was created with a Redis server configured to handle more than 1 databases. Exiting 

我嘗試使用redis-dump,但我得到一個錯誤,當我嘗試導入生成轉儲到新實例中。 (不涉及2個DBS對1 DB I認爲,而在Redis的轉儲的錯誤,這仍然是在阿爾法。

怎麼辦?

+0

局部主從複製是不可能的redis的。如果你想爲你的一個數據庫進行復制,你應該把額外的數據庫移動到單獨的實例上。 – 2012-08-08 04:50:42

+0

@GarpartapSingh你能否詳細說明如何在答案中做到這一點? – 2012-08-08 08:02:30

回答

3

這是我如何實現它(與Gurpartap辛格的幫助):

  • 配置第二Redis的實例與databases 2就像第一個
  • 複製的第一個實例(見http://redis.io/topics/replication
  • 在Redis CLI上:選擇1(選擇第二個分區)
  • 在Redis CLI上:FLUSHDB(刪除分區)在第二DB l鍵)
  • 在Redis的CLI:保存(保存數據集到磁盤)
  • 退出Redis的CLI和停止Redis的
  • 更改配置databases 1
  • 開始Redis的再次

此時,你應該有一個正在運行的Redis實例只有一個數據庫(DB 0從原來的Redis實例)

這裏的關鍵是,當我們刪除所有鍵在第二分貝,然後保存數據設置爲磁盤,結果轉儲只有一個分貝。 (謝謝你的提示Gurpartap辛格)

1

據我所知,你的Redis實例A,其中有db 0和db 1.你想在另一個實例B上覆制數據庫0(可能在一臺獨立的機器上 - 但並不重要)Redis很大程度上關注完整的實例複製,而不是單獨的數據庫

所以,如果你仍然想複製數據庫0而不是數據庫1,我建議你將這兩個數據庫中的任何一個遷移到一個單獨的實例,比如,將數據庫1遷移到一個單獨的實例,獨立於這個複製圖表。啓動主從複製f或者只有db 0的實例(實例A)。

下面是關於如何Redis的複製可以實現一個詳細的解釋:http://redis.io/topics/replication

簡單地說,你必須連接到你想從一個全新的實例(B),併發出命令:slaveof redis-master.webapp.com 6379,其中地址和端口指向實例A.然後它將同步數據並遵循主實例的所有更新。

如果您發現它不同步數據,您可以使用info命令檢查它是否處於同步狀態。在主人身上嘗試一下。日誌也有幫助。

希望有所幫助。如果您需要更多關於設置Redis複製的信息,請告知我。

+0

感謝您的回答,但它並沒有真正的幫助。你寫「所以,如果你仍然想複製分貝0,而不是DB 1,我建議你遷移要麼分貝到一個單獨的實例。就像,DB遷移至一個單獨的實例,獨立於本複製圖的。」這正是我的問題!我怎樣才能只遷移一個數據庫? – 2012-08-12 06:08:04

+0

「簡單」的方法是克隆實例(再次通過複製)。即將「獨立」實例作爲實例A的從屬;當同步完成時,使它成爲「無人的奴隸」。在此之後,你可以從「獨立」的實例和從實例A. DB 1中取出分貝0這是一個簡單,方便,可靠的方式(停機時間更少)。 – 2012-08-12 13:25:36

+0

我一定很厚,我還是不明白。假設我有從實例A複製的單獨實例。我將它設置爲'slaveof no one'。它有兩個dbs在這一點上。你能一步一步地解釋我如何從這種情況得到它只有一個分貝的情況嗎?如何從實例中刪除其中一個dbs? – 2012-08-13 09:14:53

相關問題