2016-02-28 85 views
0

我使用cbbackup來備份couchbase。然後對數據庫執行一些操作,例如添加和刪除文檔。操作完成後,我想放棄所有操作並將db恢復到備份狀態。如何將couchbase恢復到備份狀態?

我做了以下測試。 cbbackup和cbrestore在我的測試中沒有幫助。如何實現我的目標?

  1. 備份數據庫

    $ rm -rf /tmp/cbbackup 
    $ /opt/couchbase/bin/cbbackup http://cb_ip:8091 /tmp/cbbackup -u 'xxx' -p '***' -v 
    
  2. 記住社會桶的項目數。

    • 數:33
  3. 從社會桶
    • 刪除ID刪除一個文件:現有項目-110
  4. 添加了兩個新的文件,以社會桶
    • 標識:新項目1,新項目2
  5. 請記住社交存儲分區的項目數量。
    • 數:34
  6. 恢復社會桶

    $ /opt/couchbase/bin/cbrestore /tmp/cbbackup http://cb_ip:8091 -u 'xxx' -p '***' -b mybucket -v 
    
  7. 驗證是否刪除的文檔又回來了,如果添加的文件將被刪除。

    • 結果:字數統計:34,沒有變化
    • 刪除的項目不回來了。
    • 添加的項目不會被刪除。
  8. 結論:cbrestore無法將db恢復到備份時間點。備份時間點後的更改不會被刪除。

  9. 使用cbtransfer恢復數據。結果和結論與cbrestore相同。

    $ /opt/couchbase/bin/cbtransfer /tmp/cbbackup http://cb_ip:8091 -u 'xxx' -p '***' -b mybucket -v 
    

回答

1

之前,我直接回答你的問題讓我解釋有關cbbackup和cbrestore兩個重要的概念。

  1. 這些工具不會在備份和恢復過程中傳輸原始數據文件。在備份期間,數據從服務器流出並寫入磁盤,在恢復過程中,使用設置操作將數據放入數據庫。

  2. Couchbase能夠在設置過程中進行衝突解決。這意味着,如果您備份了密鑰,然後進行了更新,然後執行還原並啓用了衝突解決方案,則在還原期間的集合將被丟棄,因爲它不是最新的更新。

以下是適用於您的用例的兩種備份方案。

首先讓我們看看時間點恢復方案。爲了達到此目的,您應該刪除並重新創建您的存儲桶,然後運行cbrestore。原因是cbrestore不會意識到您在備份後添加的新密鑰,並且無法刪除它們。

假設在另一種情況下,您只是想用備份的數據強制覆蓋存儲桶中的所有數據。在這種情況下,您希望禁用衝突解決方案,並且可以使用「-x conflict_resolve = 0」標誌來執行此操作。當我備份了1000個密鑰,然後更新它們,然後想要恢復我在備份後執行的更新時,這會起作用。 (請注意,在Couchbase 4.0和4.1中意外刪除了conflict_resolve標誌,但將在4.1.1和4.5中加入)

最後,我建議不要使用cbtranfer,因爲它沒有經過測試, cbbackup和cbrestore,並且該工具通常僅用作最後的手段。