Ubuntu

是否可以從 .ns 和 .0、.1、….文件?

  • October 18, 2012

我在 Ubuntu 12.10 上安裝了 MongoDB 2.0.4。最近我從外部連接到數據庫時遇到了一些問題,並且發現有一些東西阻止了 MongoDB 正確啟動。正如幾個來源(參見 StackOverflow)所建議的那樣,我刪除/var/lib/mongodb/mongodb.lock並執行了mongod --repair. 這並沒有解決問題,MongoDB 無法執行並繼續創建鎖定文件,之後它不會負責刪除。通過查看日誌,我意識到它無權訪問某個名為 的文件夾$tmpSomething,因此(因為名稱暗示了一個臨時文件夾)我刪除了它,然後一切正常……除了我只有一個我以前的數據庫在視線範圍內,而其他數據庫仍然存在,因為我的/var/lib/mongodb/文件夾仍然充滿.ns .0 .1 .n很重的文件。有沒有辦法將它們恢復到數據庫中?(我曾嘗試使用 mongorestore,但正如我所料,它不處理這些文件)。

謝謝

.ns .0 .1etc. 文件是數據文件本身。如果您使用指向該文件夾的參數啟動了一個mongod實例,或者如果您將內容移動到其他地方並使用指向那裡的選項,mongod 將嘗試正常讀取它們。--dbpath

由於您的問題表明損壞和/或其他一些問題開始mongod(您應該真正發布啟動消息日誌文件,也許在一個單獨的問題中解決該問題),那麼還有其他選擇。作為參考,最常見的問題是權限相關的問題,尤其是當人們嘗試手動啟動 mongod(以自己的身份)或使用 sudo(以 root 身份)並在各個目錄中創建有問題的權限時。

您是正確的,mongorestore不能直接使用這些數據文件,但mongodump可以讀取它們並將其中的數據轉儲到mongorestore預期的 BSON 文件中。

您想要的選項是dbpath。你提到你的路徑是/var/lib/mongo,所以你可以執行這樣的東西:

mongodump --dbpath /var/lib/mongo -d <database name> -o /path/to/put/files

或者,您也可以使用--repair此處來修復損壞以及極端情況下的查詢選項,以繞過損壞的部分(如果有的話,很少需要)。頁面上描述了各種選項mongodump

http://docs.mongodb.org/manual/reference/mongodump/

轉儲文件後,您可以使用mongorestore將它們重新導入另一個mongod實例。

引用自:https://serverfault.com/questions/439658