簡體   English   中英

將 mongo-data 鏈接到 /data/db 文件夾到卷 Mongodb Docker

[英]Link mongo-data to /data/db folder to a volume Mongodb Docker

我不小心刪除了 docker mongo-data:/data/db 的卷,我有那個文件夾的副本,現在問題是當我運行 docker-compose 向上 mongodb 容器沒有啟動代碼時,出現以下錯誤有關錯誤和 mongo-data 文件夾的更多詳細信息,請有人幫助我

在 docker-compose.yml

卷:-./mongo-data:/data/db

在此處輸入圖像描述

在此處輸入圖像描述

在此處輸入圖像描述

從備份文件恢復

從 docker 容器中的故障 mongodb 修復損壞文件的分步過程:

  1. , 在你開始之前。 制作文件的副本。

  2. 確保您知道容器中運行的是哪個版本的映像

  3. 生成新容器以運行修復過程,如下所示

    docker run -it -v <data folder>:/data/db <image-name>:<image-version> mongod --repair
  4. 修復文件后,您可以從docker-compose啟動容器

如果修復失敗,通常意味着文件損壞無法修復。 仍然有機會按照此處所述導出數據來修復它。

如何保護正確的備份文件

數據庫不斷地處理文件,因此磁盤上的文件不斷變化。 此外,數據庫將在內部 memory 緩沖區中保留一些更改,然后再將它們刷新到文件系統。 盡管數據庫引擎在確保數據庫可以通過使用 2 階段提交過程(首先更新事務日志而不是數據文件)從突然故障中恢復方面做得很好,但是當文件被復制時,可能會出現損壞將阻止數據庫恢復。

這種損壞的原因是復制過程不知道數據庫寫入過程的進度,這會產生racing condition 用非常簡單的話來說,當數據庫正在寫入時,復制過程將創建一個半更新文件的副本,因此它將被破壞。

當數據庫編寫器正在寫入文件時,我們稱它們為hot文件。 從操作系統的角度來看, hot files是術語,MongoDB 也使用了從MongoDB角度來看的術語hot backup Hot backup是指在數據庫運行時進行備份。

要拍攝正確的快照(確保文件是cold的),您需要按照此處說明的過程進行操作。 簡而言之,在此過程中發出的命令db.fsyncLock()將通知數據庫引擎刷新所有緩沖區並停止寫入文件。 這將使文件cold ,但數據庫仍然hot ,因此術語hot fileshot backup之間存在差異。 復制完成后,通過發出db.fsyncUnlock()通知數據庫開始寫入文件系統

請注意,該過程更復雜,並且可以隨着數據庫的不同版本而改變。 在這里我對其進行簡化,以說明文件快照存在的問題。 為了確保正確和一致的備份,請始終遵循您使用的數據庫版本的記錄過程。

建議的備份方法

首選備份應始終是數據轉儲方法,因為這可確保即使在升級/降級數據庫引擎的情況下您也可以恢復。 MongoDB提供了非常有用的工具,稱為mongodump ,可用於通過轉儲數據而不是復制文件來創建數據庫備份。

有關如何使用備份工具以及其他備份方法的更多詳細信息,請閱讀 MondoDB 文檔的MongoDB 備份方法一章。

暫無
暫無

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

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