MongoDB データベースを .ns および .0、.1、... ファイルから回復することは可能ですか?

MongoDB データベースを .ns および .0、.1、... ファイルから回復することは可能ですか?

Ubuntu 12.10 に MongoDB 2.0.4 をインストールしています。最近、外部からデータベースに接続する際に問題が発生し、MongoDB が正しく起動しない原因があることがわかりました。いくつかの情報源 (StackOverflow を参照) で提案されているように、 を削除し/var/lib/mongodb/mongodb.lockて を実行しましたmongod --repair。それでも問題は解決せず、MongoDB は実行されず、ロック ファイルを作成し続けましたが、その後は削除されませんでした。ログを確認すると、 というフォルダーにアクセスできないことがわかったので$tmpSomething、(名前から一時フォルダーであることが示唆されていたため) それを削除したところ、その後はすべて機能しました...ただし、以前のデータベースが 1 つしか表示されておらず、他のデータベースはまだそこに残っています。これは、/var/lib/mongodb/フォルダーにまだ大量のファイルが含まれているためです.ns .0 .1 .n。それらをデータベースに復元する方法はありますか? (mongorestore を試しましたが、予想どおり、それらのファイルは処理されませんでした)。

ありがとう

答え1

etc..ns .0 .1ファイルはデータ ファイルそのものです。そのフォルダーを指す引数mongodでインスタンスを開始した場合--dbpath、またはコンテンツを別の場所に移動し、そこを指すオプションを使用した場合、mongod は通常どおりにそれらの読み取りを試みます。

問題は破損や起動時のその他の問題を示しているためmongod(その問題に対処するには、起動メッセージのログ ファイルを別の質問で投稿する必要があります)、代替手段があります。参考までに、最も一般的な問題は権限に関連しており、特にユーザーが mongod を手動で (自分自身として) または sudo を使用して (ルートとして) 起動しようとして、さまざまなディレクトリに問題のある権限を作成しようとする場合に発生します。

mongorestoreこれらのデータ ファイルを直接使用することはできませんが、mongodumpそれらを読み取り、そこからデータを期待どおりの BSON ファイルにダンプすることはできますmongorestore

ここで必要なオプションはdbパスパスは であると述べている/var/lib/mongoので、次のように実行できます。

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

オプションとして、--repair破損を修正するために、極端な状況でクエリ オプションとともにここでも使用して、破損したセクションを回避することもできます (必要になることはほとんどありません)。さまざまなオプションについては、次のmongodumpページで説明されています。

mongodb.org のマニュアルを参照してください。

ファイルをダンプしたら、 を使用して別のインスタンスmongorestoreに再インポートできます。mongod

関連情報