データディレクトリを変更した後、MongoDBが起動しない


10

yummongodbを使用してインスタンスをインストールしました。これですべてが正常に動作します。を使ってサービスを開始しましたservice mongod start。それはうまくいきます。次に、構成ファイルでdata directoryとを変更しlog pathました。サーバーを再起動し、サービスを開始しました。しかし、私は以下のエラーを受け取ります:

Restarting mongod (via systemctl):  Job for mongod.service failed. See 'systemctl status mongod.service' and 'journalctl -xn' for details.
                                                           [FAILED]

私が与えるとき、私systemctl status mongod.serviceは以下を得ます:

 Loaded: loaded (/etc/rc.d/init.d/mongod)
   Active: failed (Result: exit-code) since Wed 2015-03-18 11:35:56 IST; 22s ago
  Process: 10672 ExecStop=/etc/rc.d/init.d/mongod stop (code=exited, status=0/SUCCESS)
  Process: 10841 ExecStart=/etc/rc.d/init.d/mongod start (code=exited, status=1/FAILURE)
 Main PID: 10509 (code=exited, status=0/SUCCESS)

Mar 18 11:35:56 localhost systemd[1]: Starting SYSV: Mongo is a scalable, document-oriented database....
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session opened for user mongod by (uid=0)
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session closed for user mongod
Mar 18 11:35:56 localhost mongod[10841]: Starting mongod: [FAILED]
Mar 18 11:35:56 localhost systemd[1]: mongod.service: control process exited, code=exited status=1
Mar 18 11:35:56 localhost systemd[1]: Failed to start SYSV: Mongo is a scalable, document-oriented database..
Mar 18 11:35:56 localhost systemd[1]: Unit mongod.service entered failed state.

私が与えるとき、私journalctl -xnは以下を得ます:

-- Logs begin at Wed 2015-03-18 08:56:56 IST, end at Wed 2015-03-18 11:35:56 IST. --
Mar 18 11:30:01 localhost systemd[1]: Starting Session 20 of user root.
-- Subject: Unit session-20.scope has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit session-20.scope has begun starting up.
Mar 18 11:30:01 localhost systemd[1]: Started Session 20 of user root.
-- Subject: Unit session-20.scope has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit session-20.scope has finished starting up.
-- 
-- The start-up result is done.
Mar 18 11:30:01 localhost CROND[10712]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Mar 18 11:35:56 localhost systemd[1]: Starting SYSV: Mongo is a scalable, document-oriented database....
-- Subject: Unit mongod.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit mongod.service has begun starting up.
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session opened for user mongod by (uid=0)
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session closed for user mongod
Mar 18 11:35:56 localhost mongod[10841]: Starting mongod: [FAILED]
Mar 18 11:35:56 localhost systemd[1]: mongod.service: control process exited, code=exited status=1
Mar 18 11:35:56 localhost systemd[1]: Failed to start SYSV: Mongo is a scalable, document-oriented database..
-- Subject: Unit mongod.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

誰かがこれを修正するのを手伝ってくれる?ありがとう!!!

PS:作成したデータディレクトリには、ユーザーのすべての権限があります。ただし、データディレクトリをデフォルト(/var/lib/mongodb)に変更すると、正常に機能します。

回答:


6

私は同様の問題に遭遇し、mongod.conf私の場合、誤って構成されたファイルであることがわかりました。また、新しいディレクトリの権限が適切に設定されていない可能性もあります。 chown -R mongod:mongod <directory name>私がアクセスを保証する方法でした(もちろん、chmod 600 <dir>同様に)。最後に、を実行しls -Zて、コンテキストが正しいことを確認します。私は私のために働いたデフォルトのディレクトリとちょうど比較しました。

これがまだ解決されていない場合は、ログファイルの内容も表示してください。そこにいくつかの手がかりがあるかもしれません。


4

@mustaccioの発言を拡張すると、私にとっての答えは、新しいlogpathとのSELinuxコンテキストでしたdbpath。私は次のコマンドを実行しましたが、すべて順調でした。

sudo chcon -Rv --type=mongod_log_t $logpath
sudo chcon -Rv --type=mongod_var_lib_t $dbpath

(これはRHEL 7.1にありました)


4

私はこれをRaspberry PiとUbuntuサーバーで使用しました。

「mongod.serviceのジョブが失敗しました。詳細については、「systemctl status mongod.service」および「journalctl -xn」を参照してください。」

私はさまざまな理由でさまざまな機会にこの問題を抱えていました:

  1. 誤った名前の.conf ファイル – mongodbスクリプト(私はに移動しました/etc/init.d/mongodb)、CONF=/etc/mongod.conf実際のファイルがだったときの57行目/etc/mongodb.conf。57行目を変更すると修正されました。また、スクリプト名をまったく同じに変更することもできました。

  2. mongod.lockファイル – mongodが最後に停止したときに、データベースを閉じる機会がありませんでした。これにより、データベースフォルダにというファイルが残りますmongod.lock。フォルダー内には番号があります(mongoが最後に使用したのはPIDだと思います)。このファイルが存在する場合、mongodサービスを開始できません。ファイルを削除して、再試行してください。

  3. mongoユーザー –私は、mongod.serviceの起動と実行を担当するLinuxユーザーを作成する必要がありました。私は「mongo」という名前を付けて、/etc/init.d/mongodbスクリプトの95行目を更新しましたDAEMONUSER=${DAEMONUSER:-mongo}。もちろん、これはmongoという名前の新しいユーザー(または私が思っているもの)を作成した場合にのみ機能します。

  4. DB権限 –これは人気のある権限です。データベースフォルダーの場所を宣言したら、 'mongo'ユーザーがそのファイルの所有権を持っていることを確認する必要があります。たとえば、私のデータベースはに保存されてい/data/dbます。私は次のコマンドを実行しました。
    sudo chown –R mongo:mongo /data
    これにより/data、とそのすべてのサブディレクトリの所有権がmongoユーザーに移動しました。

  5. 間違ったサービス –これは私にとって少し恥ずかしいことでした。のmongo代わりにサービスとして開始しようとしていましたmongodmongomongoに直接コマンドを直接入力して実行できるシェルです。このようにしてデータベースを作成し、たとえばいくつかのオブジェクトを追加しました。mongod一方、mongoデーモンはバックグラウンドで実行され、書き込み/使用してアクセスする他のアプリケーションのデータベースをホストします。confファイルやスクリプトなどで、それらを混同しないようにしてください。

これらの1つが問題を解決することを願っています。

余談mongodb.confですが、ファイルが空です。ただし、それが空であっても、正しく指す必要があります。


2

私はこれを試してみましたが、うまくいきました。

sudo chown -R mongodb:mongodb /var/log/mongodb
sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chmod -R 755 /var/lib/mongodb
sudo chmod -R 755 /var/log/mongodb

1

Centos 7 Reposに付属するmongoからMongos独自のリポジトリにアップグレードするときにこの問題に遭遇しました。事実上、V2からV3にアップグレードしています。

centos 7リポジトリはユーザーmongodbを必要とし、mongos自身のリポジトリはユーザーmongodを必要とすることがわかりました

結局のところ、ユーザー名が異なっていて気付かなかったため、古いインストールからまだ存在していたログファイルが、新しいインストールが書き込むことができませんでした。


1

私のシステム(Fedora)では、tmpfs(ram)に「/ var / log」があり、そのパーティションのすべてをリブートするたびに失われます。SSDドライブがあり、I / Oを減らしたい(ドライブの寿命を節約する)ため、多くの人がこれを利用しています。

解決策は、/ var / log / mongodbディレクトリを作成し、システムを再起動するたびに所有者としてmongodbを設定することです。

次のようなスクリプトを使用します。

#!/bin/sh
sudo mkdir /var/log/mongodb
sudo chown mongodb:mongodb /var/log/mongodb

mongodが使用しているユーザーがわからない場合は、次のようにします。

cat /etc/passwd | grep mongo

システムのスタートアップにスクリプトを追加します。


0

パスは編集しません。私はコマンドで問題を解決しました:

mongod --dbpath /data/mongo

0

これは許可の問題です。データディレクトリまたはログファイルのパスを変更する場合、新しいディレクトリへのアクセス許可を与える必要があります。その後、正常に実行されます。このような問題が発生した場合は、まずログファイル「mongod.log」を確認してください。


これは役に立ちませんでした。mongodサービスを実行しているユーザーに「ログ」フォルダーへの完全なアクセス許可を与えました。WindowsServer 2016を使用しています。ログファイルへのパスを変更した後もサービスを再起動できません。エラー:「サービスは制御機能に応答していません。」、何か考えはありますか?
Eddie Kumar

0

MongoDBサーバーを停止します。

service mongod stop

mongoディレクトリを新しいディレクトリにコピーします。

rsync -av /var/lib/mongo /home/data/

古いディレクトリの名前を変更します。

mv /var/lib/mongo /var/lib/mongo.bak

新しい場所へのシンボリックリンク:

ln -s /home/data/mongo /var/lib/mongo

MongoDBサーバーを起動します。

service mongod start
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.