
我在 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,但正如我所料,它不處理這些文件)。
謝謝
答案1
等.ns .0 .1
文件是數據文件本身。如果您mongod
使用指向該資料夾的參數啟動了一個實例--dbpath
,或者如果您將內容移動到其他位置並使用指向那裡的選項,mongod 將嘗試正常讀取它們。
由於您的問題表明腐敗和/或其他一些問題開始mongod
(您確實應該發布啟動訊息日誌文件,也許在一個單獨的問題中來解決該問題),那麼還有其他選擇。作為參考,最常見的問題與權限相關,特別是當人們嘗試手動(作為自己)或使用 sudo(作為 root)啟動 mongod 並在各個目錄中創建有問題的權限時。
您是對的,mongorestore
不能直接使用這些資料文件,但mongodump
可以讀取它們並將資料轉儲到mongorestore
所需的 BSON 文件中。
您想要的選項是資料庫路徑。你提到你的路徑是/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
實例中。