web-dev-qa-db-ja.com

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を試しましたが、予想していたように、これらのファイルは処理しません)。

ありがとう

14
tunnuz

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

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

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インスタンスに再インポートできます。

19
Adam C