Mongodb

使用副本集進行 MongoDB 還原

  • January 7, 2022

我有這樣的 MongoDB 設置:

Primary   | Server1  
-----------+---------  
Secondary | Server2  
-----------+---------  
Arbiter   | Server3  
-----------+---------  
Backup    | Server4  

我有一個使用mongodump進行日常備份的備份伺服器。現在我必須使用mongorestore測試我的備份轉儲。

主要問題如下:恢復備份的最佳方法是什麼?

Q1:我必須遵循這些步驟嗎?

  1. 停止仲裁和輔助
  2. 在主數據庫中刪除數據庫
  3. 將備份恢復到主要
  4. 刪除輔助數據庫
  5. 重啟所有伺服器

Q2:在不停止任何伺服器的情況下恢復主伺服器上的備份?

Q3。將次要作為主要並將備份還原到次要(以前的主要),並將其設為主要。

Q4:有什麼辦法可以恢復這兩個伺服器?

請建議恢復 MongoDB 的最佳方法。

根據 MongoDB BOL 記錄的Here MongoDB 為**two options**副本restoring集的次要成員提供:

1)手動將數據庫文件複製到每個數據目錄。

2)允許初始同步自動分發數據。

注意:-如果您的數據庫很大,initial sync可能需要很長時間才能完成。對於大型數據庫,最好將數據庫文件複製到每個host.

主要問題如下:恢復備份的最佳方法是什麼?

如果要將mongodump備份還原到副本集中,則需要還原mongorestore到目前主節點。數據將通過正常方式複製到其他副本集成員。您可以mongorestore --drop ...在導入之前使用刪除每個集合(如果它已經存在),但在完全恢復方案中,您通常會從空部署開始重建副本集。在 MongoDB 3.6 中,mongorestore僅插入文件 - 它不會刪除任何現有數據庫或更新/更新/替換任何現有文件。

Q1:我必須遵循這些步驟嗎?

此列表中唯一適用的步驟是“將備份還原到主節點”。隨著mongodump您正在導出數據和索引定義,並且必須mongorestore進入主數據庫以重建數據文件。您的輔助設備在您恢復時必須線上,並且能夠通過複製跟上。您可以使用該--writeConcern majority選項等待大多數副本集確認寫入,並確保您的還原不會超過複製。

Q2:在不停止任何伺服器的情況下恢復主伺服器上的備份?

這是正確的做法。

Q3。將次要作為主要並將備份還原到次要(以前的主要),並將其設為主要。

一個副本集只能有一個主節點,因此您不會通過交換目前主節點和次節點的角色來獲得任何收益。數據仍然需要複製。

Q4:有什麼辦法可以恢復這兩個伺服器?請建議恢復 MongoDB 的最佳方法。

您必須將其還原mongodump到主數據庫才能建構數據文件。如果您正在尋找將數據複製到每個輔助節點的替代方法:您可以mongorestore進入單個節點副本集,停止主節點,然後將數據文件複製到新的輔助節點並避免初始同步。

當然有更好的備份方法,特別是如果您的目標是更快(且影響更小)的備份和恢復時間。備份大型部署mongodump可能會對性能產生重大影響(特別是如果您的數據集比可用 RAM 大得多)並且需要更長的時間來恢復,因為所有數據文件和索引都需要重建。

有關備份策略的一般比較,請參閱備份及其在災難恢復中的作用。此比較中引用的 MMS 產品現在稱為 MongoDB Cloud Manager,但一般注意事項和比較點仍然適用。

引用自:https://dba.stackexchange.com/questions/199102