質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Q&A

解決済

1回答

5845閲覧

service mongod --dbpath /[PATH]/ で起動できない

poyopi

総合スコア113

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

0グッド

0クリップ

投稿2016/03/29 05:10

編集2016/07/13 02:19

MongoDBについて質問です。
起動するとき、dbpathを指定したうえで起動しっぱなしにしてやりたいのですが、

service mongod --dbpath /[PATH]/
と指定すると

Usage: /etc/init.d/mongod {start|stop|status|restart|reload|force-reload|condrestart}

と返されてしまいます(mongoの起動はされない)。serviceを使わないで

mongod --dbpath /[PATH]/
とすると正常に起動します。

service mongod start
とすると起動失敗として以下のエラーがでます。

# service mongod start Starting mongod: about to fork child process, waiting until server is ready for connections. forked process: 23959 ERROR: child process failed, exited with error number 1 [FAILED]

mongod --repair --dbpath=[PATH]
のようにrepairオプションをつけると[PATH]の下にmongod.lockファイルが生成されてしまいます。さまざまなサイトの知見からでは、repairすることで消せるというように見受けられるのですが……(Masatomo Nakano Blogなど)。

[追記]
ログの置き場ディレクトリの所有者権限をmongodに変えるなどし、sudoコマンドで起動しようと試みたところ、エラーのナンバーが変わりました。

# sudo service mongod start Starting mongod: about to fork child process, waiting until server is ready for connections. forked process: 29633 ERROR: child process failed, exited with error number 14 [FAILED]

serviceコマンドを使って常にmongoを起動したままにしておきたいのですが、ご助力頂けませんでしょうか。なお、serviceのかわりに/etc/init.d/mongodとしても同様に起動できません。


もう一度同じようにmongoを起動する機会があってこの質問と自己回答を見返したのですがわかりにくく結局手こずったためシンプルに手順を箇条書きします。

  • (前段)もし予期せぬshutdown等でなく計画的ならmongoexportしておく

(別環境で同様のものが動いているならそこからでもよい)

  • lockファイルを含め、すべてのdbのディレクトリの中身を消す

(journalフォルダや.nsファイル.bsonファイルなどいろいろあるが全部)

  • 起動はsudo service mongod start
  • (後段)mongoimportする

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

 おそらくですが、自己解決しました。

 そもそもの経緯として、毎日毎時データをためていたらディスクの使用率が95%ぐらいになり、mongodbの置き場所を変えようと思ったことがきっかけでした。例えば/hogeというところから/piyoというところに引っ越したかったのです。
/hogeにあるmongodb関連のものをどんどん/piyoにコピーしようと思い、まずは/etc/mongod.confの編集に始まり(/hoge/の記述を/piyo/に書き換える)、/hoge/配下にある../run/mongodb/mongd.pid、../lib/mongoなどを/piyo/配下に「cp -a」しました。これが問題で、../lib/mongo/配下はまっさらな状態にしておかねばならなかったのでした。コピーするのにものすごく時間がかかった時点で何か気づけばよかったのですが。Qiitaのこちらの記事をみると、jounalがあるのがまずいようでした。このディレクトリには、prealloc.0といったようなファイルが入っています。どういう仕組みのものか今後調べていきますが、何か知見のある方にご教示いただければと思います。
質問内容にて追記していますが、引っ越した関係で、/piyo/log/mongodb/についても権限がrootになっていたので所有者・グループともに/hoge/log/mongodb/でそうしているようにmongodとしました(chown -R, chgrp -R)。

 再起動は

# sudo service mongod start Starting mongod: about to fork child process, waiting until server is ready for connections. forked process: 30600 child process started successfully, parent exiting [ OK ]

 無事に完了したので、もともとmongoexportしていたcollectionをmongoimportして、止まっていた間のデータがないとはいえ、なんとか再稼働させることができました。

 サーバにDBやミドルウェアを配置する作業は難しいですね。理解のないままコマンドをググったりして進めていくと、すぐハマってしまって投げがちです。基礎的な知識を体系的に学べる書籍等ありましたら、ご教示頂けたらと思います。

[追記]
使用率が95%ほどになっていたのは、まさにこのjournalファイルが問題でした。mongoでは、ある一定の間隔でスタックに溜めていたデータをDBに書き込むのだそうで、万が一DBにスタック上のデータが書き込まれる前にクラッシュしたとしても、journalによってリカバリが可能なのだということです。以下、参考です。

 ということで、こちらを消したら使用率は30%ほどとなりました。もともとconfファイルにはnojournalと記述してあったのですが、なぜ生成されていたのかは謎です。

投稿2016/03/29 08:09

編集2016/04/01 07:39
poyopi

総合スコア113

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問