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


14

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で試しましたが、予想どおり、これらのファイルは処理されません)。

ありがとう

回答:


19

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

あなたの問題は、破損や他の何らかの問題の開始を示唆しているので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インスタンスに再インポートするために使用できます。



2
Mongo 3.0では、指定されたファイルでmongoサーバーを起動するオプションがあります。mongod --dbpath ./その後、Mongodumpを続行せずに--dbpath
-Shwaydogg

3
ただし、Mongo 3.0を実行mongod --dbpath ./していて、.ns .0ファイルにデータベースが含まれていない場合は、ストレージエンジンが古いMMapV1エンジンではなく新しいWiredTigerエンジンにデフォルト設定されている可能性があります。mongod --storageEngine mmapv1 --dbpath ./代わりに、古いエンジンを使用して接続してみてください。
フレームボー

1
誰でも.ns、.0、.1ファイルからmongo 3.0へのデータの移行を手伝ってくれますか
Mandeep Singh

1
@flamebaudが言ったように、デフォルトのエンジンが変更されました。Mongoドキュメントのデフォルトストレージエンジンの変更を確認してください。WiredTiger Storage Engine
Ludovic Kuty
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.