2012-10-16 42 views
4

希望這是一個簡單的問題:的Redis數據庫恢復顯示沒有記錄

我想一個Redis的數據庫從一臺機器(M1)複製到另一個(M2)。兩臺機器都運行相同版本的redis。以下是我所做的: -

  1. 在M1上,發出「保存」。據我所知,這創建了我的數據集的磁盤文件的時間點。根據我的配置文件(redis.conf),這寫入一個名爲「dump.rdb」的文件。

  2. 在M2上,我關閉了redis並刪除了該機器上的dump.rdb文件。然後,我將dump.rdb從M1 - > M2(到M2的redis.conf中指定的預期位置)複製並重新啓動M2上的redis實例。

在對M2 redis實例發出一些「hgetall」查詢時,沒有記錄存在。在M1上重複相同的結果給出了預期的和正確的結果。

我在做什麼錯?

回答

1

我會建議你使用redis-dump對Redis的備份和恢復

以下是用法:

$ redis-dump 
    $ redis-dump -u 127.0.0.1:6371 > db_full.json 
    $ redis-dump -u 127.0.0.1:6371 -d 15 > db_db15.json 

    $ < db_full.json redis-load 
    $ < db_db15.json redis-load -d 15 

要安裝Redis的轉儲:

$ gem install redis-dump 
+0

感謝 - 雖然看着這個(http://code.google.com/p/redis-dump/)它似乎是帶有適當警告的alpha代碼 - 它有多穩定? – bzo

+0

原來的海報選擇了正確的方法,只是複製dump.rdb文件,而在其他方面很酷的redis-dump在這種情況下完全沒用。 – antirez

3

你不這樣做更高級別的任何錯誤。可能你無意中犯了一些錯誤......確保文件複製後具有相同的MD5總和。確保第二個Redis配置爲使用dump.rdb作爲持久性方法,而不是AOF。閱讀Redis日誌以檢查它是否讀取數據庫文件。正如你還使用相同的數據庫編號?也許你的數據存儲在DB5上,但是你正在查詢DB0?

+0

如何檢查redis是否配置爲使用dump.rdb文件作爲持久性方法而不是AOF? – bzo

2

我有完全相同的問題。我最終意識到我複製dump.rdb的redis實例運行的是2.4.x,但目標redis實例運行的是2.2.x.當2.2.x實例啓動時,沒有警告說rdb文件無法讀取。但是DBSIZE,INFO,KEYS *等都顯示爲空數據庫。

將第二個實例升級到2.4.x後,我能夠按預期打開數據庫。 我知道你已經說過你的機器運行的是相同的版本,但我想在這裏添加這個以確保其他人知道如果他們有不匹配的版本,他們會看到相同的症狀。

0

由於Redis的2.6,也有遷移語句,您可以用COPY選項來運行:

MIGRATE

我想我會提到這個功能,因爲有時候你可能希望只複製部分數據。

我不會將它用於完整的數據庫轉儲和加載,前面提到的方法更適合該場景。