UbuntuでMongoDB 2.2を実行していますが、実行する場合:
Sudo mongod
/ data/dbが見つからないというエラーが表示されますが、これはデータベースの場所ではありません。 mongod.confでは、データベースパスはUbuntu 10genのデフォルト/var/lib/mongodb
これは、dbが置かれている場所です。 mongod
がconfファイルを見つけていないようです。だから私が実行すると:
Sudo mongod -f /etc/mongodb.conf
サーバーは正常に起動し、出力はログファイルに記録されます:/var/log/mongodb/mongodb.log
。すべてが幸せです。別のシェルに切り替え、mongoシェルにログインし、データベースを表示してクエリを実行できます。
だから、私はそれをキャンセルし、サービスとして実行しようとします:
> Sudo status mongodb
mongodb stop/waiting
> Sudo start mongodb
mongodb start/running, process 10468
これまでのところはよさそうですが、mongoサーバーは起動しませんでした。別の実行:
> Sudo status mongodb
mongodb stop/waiting
> mongo
MongoDB Shell version: 2.2.0
connecting to: test
Sat Sep 1 19:07:43 Error: couldn't connect to server 127.0.0.1:27017 src/mongo/Shell/mongo.js:91
exception: connect failed
「test」は正しいデータベースではなく、ログファイルには何も表示されません。
何が間違っているのかについて私は途方に暮れています。 upstartスクリプトをチェックしましたが、問題ないようです。 /etc/init/mongodb.conf
実行:
mongodb --exec /usr/bin/mongod -- --config /etc/mongodb.conf
OK、これはすべて許可に帰着しますが、ステップごとに見ていきましょう。 Sudo mongod
を実行すると、設定ファイルがまったく読み込まれず、コンパイルされたデフォルトで文字通り開始します-port 27017 、 database path of/data/dbなど-そのため、そのフォルダーが見つからないというエラーが表示されます。 「Ubuntuのデフォルト」は、設定ファイルを指定した場合にのみ使用されます(serviceコマンドを使用して開始した場合、これは舞台裏で行われます)。
次に、次のように実行しました。
Sudo mongod -f /etc/mongodb.conf
以前に問題がなかった場合は、今すぐになります-通常の設定(通常のdbpathとログを指す)をルートユーザーとしてプロセスを実行しました。つまり、通常のMongoDBフォルダーには、root:root
のuser:groupを持つ多数のファイルが存在することになります。
これにより、mongodbユーザー(サービスを実行しようとするユーザー)がこれらのroot:root
ファイルにアクセスする権限を持たないため、通常のサービスとして再度開始しようとするとエラーが発生します。おそらく、ログファイルに書き込みを行って情報を提供することはできません。
したがって、通常のサービスとして実行するには、これらのアクセス許可を修正する必要があります。最初に、MongoDBが現在ルートとして実行されていないことを確認してから、
cd /var/log/mongodb
Sudo chown -R mongodb:mongodb .
cd /var/lib/mongodb
Sudo chown -R mongodb:mongodb .
(user:groupがmongodb:mongodb
であると仮定して)それを修正する必要がありますが、おそらくls -al
または同様のもので確認することをお勧めします。これが完了すると、サービスを再び正常に開始できるようになります。
最初に、mongodbユーザー/グループが両方のdataディレクトリとlogファイル:
$ Sudo chown -R mongodb:mongodb/var/lib/mongodb /。
$ Sudo chown -R mongodb:mongodb /var/log/mongodb.log
次のコマンドを使用して、MongoDBをDaemon(バックグラウンドプロセス)として起動します。
$ mongod --fork --dbpath/var/lib/mongodb/--smallfiles --logpath /var/log/mongodb.log --logappend
Shut Down MongoDB にMongo CLIを入力し、管理者にアクセスして、shutdownコマンドを発行します。
$ ./mongo
>管理者を使用する
> db.shutdownServer()
参照: http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo
私も同じ問題を抱えていました。だから私はcd/var/lib/mongodb /に行き、mongod.lockファイルを削除し、それは私のために働いた。
@nelsonicによって提案されたデータ、ジャーナル、ログフォルダーのすべての許可を確認した後、/ tmpフォルダーのファイルをロックする許可を与えることで問題を解決しました。
Sudo chown mongod:mongod mongodb-27017.sock
AWS Amazon Linuxインスタンスとして実行していました。以下のようにmongodユーザーとして実行し、エラーコードを調査することでそれを理解しました。他のトラブルシューティングに役立つ場合があります。
Sudo -S -u mongod mongod -f /etc/mongod.conf
何もうまくいきませんでしたが、それは/tmp
ディレクトリ:
Sudo chmod 1777 /tmp
Sudo chown root:root /tmp
私のmongodbはmongodユーザーとしてコマンドラインから起動されたときに起動しましたが、User = mongodのサービスとしては起動しませんでした。 1時間後に権限、サービスの定義、ソケットをチェックしました... SElinuxでした!
/ etc/selinux/configでenforcingからpermissiveに切り替えて再起動しました。今は大丈夫です。
上記の答えはどれも私にとってはうまくいきませんでした。私は最終的にinitスクリプトを次のようにデバッグすることでそれを理解しました:
Sudo bash -x /etc/init.d/mongodb start
そして、それが間違った設定パスをmongodに渡すことを確認しました。 /etc/init.d/mongodbの行を「CONF =/etc/mongodb.conf」から「CONF =/etc/mongod.conf」に変更しただけです。バージョン2は前者を使用し、バージョン3をインストールすると/etc/mongod.confが新しい形式で追加されましたが、initスクリプトは更新されなかったようです。
更新:initスクリプトが機能するという奇妙な問題がありますが、「Sudo service mongodb start」ではなく「Sudo bash -x /etc/init.d/mongodb start」で実行した場合のみです。停止についても同じです。
このコマンドを試してください:
Sudo chown mongodb /tmp/mongodb-27017.sock
最近、mongodを更新し、古いデータベースを実行している場合、このエラーが発生する可能性があります。 MongodはデフォルトでwiredTigerエンジンを使用し、mmapv1データベースができます
/etc/mongod.confのエンジン設定を編集します
# engine: wiredTiger
engine: mmapv1
注意-YAMLは空白文字に敏感です
journalctl/systemdはこの問題を認識しません。 /var/log/mongodb/mongod.logのmongodログを確認します
ここで説明した手順のようなものでデータベースを変換できると思います
https://docs.mongodb.com/manual/tutorial/change-standalone-wiredtiger/
上記の回答がどれも役に立たなかった後、ログファイルを削除するとMongoが復活しました。
/ var/logがいっぱいの場合、サービスはログを追加できないため、HDDスペースも確認してください。