
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
ページで説明されています。
ファイルをダンプしたら、 を使用して別のインスタンスmongorestore
に再インポートできます。mongod