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を試しましたが、予想していたように、これらのファイルは処理しません)。
ありがとう
.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
インスタンスに再インポートできます。