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

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

ただいまの
回答率

90.49%

  • MongoDB

    250questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,687

poyopi

score 97

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する
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

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によってリカバリが可能なのだということです。以下、参考です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

  • 解決済

    Docker上でMongoDBが動かせない

    Dockerを使って、MongoDBを動かそうと思っているのですが、なかなかうまくいきません。 具体的には、 $ service mongod start を実行しよう

  • 受付中

    CentOS7の起動サービスの詳細説明

    CentOS7の設定時に利用しない不要なサービスは停止させたいと考えております。 各サービスを停止するか否かを1つずつ検討したいのですが、各サービスについて説明しているサイト

  • 解決済

    Debian8にてheartbeatがインストールできない

    現在、Debian8(8.71 64bit GUI)が稼働しているPCに、apt-getコマンドで「heartbeat」をインストトールしようと しています。 apt-ge

  • 解決済

    EC2上でのシンタックスエラーについて

    EC2にSSH接続して、Node.jsを起動するために「sudo npm start」のコマンドを走らせると下記のようなエラーが出てしまい原因がわからず困っています。 間違えって

  • 解決済

    Ubuntu, Apache にtcp80番で繋がらない

    さくらのVPSを使って簡単なWEBサーバを構成しようとしています。外部からサーバに接続することができず、原因がわかりません。何かヒントをお持ちの方は、お教えいただけると幸いです。

  • 解決済

    CentOS7にOpenMeetingのためmysqlをインストールしたい

    お世話になっております。 OpenMeetingをインストールするため https://www.bugspray.co.jp/19 を参考にやろうとしていますが mysqlイン

  • 解決済

    UbuntuでDockerを使ったWordPress環境を作りたい

    デスクトップUbuntuでWordPressの開発環境を作ろうと思っています。 見様見真似でDockerを使ってみようと思ったのですが curl: (7) Failed to

  • 解決済

    MacOS XAMPP MySQLがStopped

     XAMPPのMySQLが永遠にStoppedのままです。 何度も再起動をして実行していますがrunningになる気配がなく助けていただきたいです。20歳学生です。XAMPPに関し

同じタグがついた質問を見る

  • MongoDB

    250questions

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