簡體   English   中英

從具有多個數據庫的實例復制單個Redis數據庫

[英]Replicate a single Redis database from an instance that has multiple databases

我有一個Redis實例,有兩個數據庫。 現在我想設置第二個實例並復制第一個實例,但第二個實例應該只有一個數據庫並且只復制第一個實例的db 0。 當我嘗試這樣做時(為第二個實例設置slaveof ... )我在Redis日志文件中收到以下錯誤消息:

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

我嘗試使用redis-dump但是當我嘗試將生成的轉儲導入新實例時出現錯誤。 (與2 dbs和1 db無關,我認為,而不是redis-dump中的一個bug,它仍處於alpha狀態。

該怎么辦?

這就是我實現它的方式(在Gurpartap Singh的幫助下):

  • 使用databases 2配置第二個Redis實例,就像第一個一樣
  • 復制第一個實例(請參閱http://redis.io/topics/replication
  • 打開第二個Redis實例的命令行(使用redis-cli)
  • 在Redis CLI上:SELECT 1(選擇第二個db)
  • 在Redis CLI上:FLUSHDB(刪除第二個數據庫中的所有鍵)
  • 在Redis CLI上:SAVE(將數據集保存到磁盤)
  • 退出Redis CLI並停止Redis
  • 將配置更改為databases 1
  • 再次啟動Redis

此時,您應該有一個只有一個db的正在運行的Redis實例(來自原始Redis實例的db 0)

這里的關鍵是當我們刪除第二個數據庫中的所有密鑰然后將數據集保存到磁盤時,生成的轉儲只有一個數據庫。 (感謝Gurpartap Singh的提示)

根據我的理解,你有redis實例A,它有db 0和db 1.你想在另一個實例B上復制db 0(可能在另一台機器上 - 但無關緊要)。 Redis主要關注完整的實例復制,而不是單獨的數據庫。

因此,如果您仍想復制db 0而不是db 1,我建議您將db中的任何一個遷移到單獨的實例。 比如,將db 1遷移到單獨的實例,與此復制圖無關。 然后,您可以為僅具有db 0(實例A)的實例設置主從復制。

以下是有關如何實現redis復制的詳細說明: http//redis.io/topics/replication

簡而言之,您必須連接到要創建slave的新實例(B),然后發出命令: slaveof redis-master.webapp.com 6379 ,其中地址和端口指向實例A.它將會然后同步數據並遵循主實例的所有更新。

如果您發現它沒有同步數據,您可以使用info命令檢查它的同步狀態。 也可以在master上試一試。 日志也有幫助。

希望有所幫助。 如果您需要有關設置redis復制的更多信息,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM