MongoDB:initAndListenの例外:20読み取り専用ディレクトリにロックファイルを作成しようとしました:/ data / db、終了しています


146

/data/dbはルートディレクトリに作成して実行しました./mongod

[initandlisten] exception in initAndListen: 20 Attempted to create a lock file on a read-only directory: /data/db, terminating
[initandlisten] shutdown: going to close listening sockets...
[initandlisten] shutdown: going to flush diaglog...
[initandlisten] now exiting
[initandlisten] shutting down with code:100

4
権限の問題のようです。mongodを実行しているユーザーは、/ data / dbディレクトリに書き込む権限を持っていますか?出力を共有ls -ld /data/dbし、id私たちがアドバイスすることができそう。
ビョルンロシュ

drwxr-xr-x 2ルートルート4096
whinytween96

uid = 1000(ユーザー)gid = 1000(ユーザー)groups = 1000(ユーザー)、4(adm)、24(cdrom)、27(sudo)、30(dip)、46(plugdev)、113(lpadmin)、128 (sambashare)
whinytween96 2017

@BjornRocheパートに感謝-ld:)
スカイネット

@BjornRoche私の出力はdrwxrwxrwx. 4 mongod mongod 4096 Sep 17 18:18 /data/dbまだですが、まだエラーが発生します。何か案は?
ブレイク

回答:


278

問題は、作成したディレクトリ、 /data/dbが所有し、rootユーザーのみが書き込み可能であるにもかかわらず、mongodを自分で実行していることです。これを解決するにはいくつかの方法がありますが、最終的には、問題のディレクトリに適切な権限を与える必要があります。これが本番用である場合は、ドキュメントを確認して慎重に検討することをお勧めします。おそらく、特別な注意が必要です。

ただし、これがテストのためだけであり、これが機能してそれを続行するために必要な場合は、これを試すことができます。これにより、ディレクトリは誰でも書き込み可能になります。

> sudo chmod -R go+w /data/db

またはこれは、あなたが所有するディレクトリを作成します:

> sudo chown -R $USER /data/db

4
誰かが内部の-Rすべての/data/dbファイルを再帰的に変更する必要があるかもしれません。
YongHao Hu 2017

2
これをありがとう。試しても同じエラーが発生する
Samuel Dare

1
このトピックはもう少し古いですが、私にとって、を使用chmodすると新しいエラーinitAndListen : operation not permittedが生成されましたが、chown機能しました。
bachinblack 2018

chownも私のためにそれをしました
dwagnerkc

ディレクトリに777 umaskを与えることは悪い習慣です。あなたは755を設定することができ、それは動作しますchmod -R 755 /data/db
フアンカバリ


25

システムがSELinuxを使用している場合は、作成したディレクトリに適切なコンテキストを使用していることを確認してください。

ls -dZ /data/db/
ls -dZ /var/lib/mongo/

とコンテキストを複製:

chcon -R --reference=/var/lib/mongo /data/db

1
あなたは私の日を救った!どうもありがとう
Keerthivasan 2017年

2
ls -dZ / var / lib / mongodb /以降のバージョンのmongo
espeed

17

同じ問題が発生し、次の解決策でこの問題を解決しました。次の解決策を試してください。

sudo mkdir -p / data / db
sudo chown -R 'username' / data / db


9

ここに画像の説明を入力してくださいまず、すべてのmongoDBサービスを停止してから、にディレクトリを作成します。/ルートがない場合はrootを意味し、ポートファイルも削除します。そのディレクトリにすべての権限を与え、そのディレクトリの所有者になり、以下のコマンドを実行します。

sudo service mongod stop
sudo rm -rf /tmp/mongod*
sudo mkdir -p /data/db
sudo chmod -R a+wxr /data
sudo chown -R $USER:$USER /data

これで完了です。MongoDBサービスを開始してください。問題が解決しない場合は、次のようにポートを変更してみてください。

sudo service mongod restart && mongod # if didn't help run below cmd
mongod --port 27018

注:私にとっては、これらすべてが機能し、うまくいくことを願っています。


5

/data/db(または/var/lib/mongodb)の権限を修正し ます。

sudo chown -R mongodb: /data/db

次に、MongoDBを再起動します(例:

sudo systemctl restart mongod

それでも解決しない場合は、/ var / lib / mongodbとは異なるデータディレクトリを使用している場合は、エラーメッセージを確認してください。その場合は実行します

sudo chown -R mongodb: <insert your data directory here>

ソース


4

素晴らしい解決策ですが、なぜWindowsの解決策を誰も与えていないのでしょうか。

Windowsを使用している場合は、コマンドを「管理者として実行」する必要があります。


6
これは、人々が通常Windows上でデータベースサーバーを実行しないためだと思います。
Blake

1
また、データベースを管理者/ rootとして実行することはお
勧めできません。

4

mongodbログをチェックしていて、そのようなエラーが発生している場合は、私が行った手順に従ってください。あなたの許可の問題が原因で発生します/data/dbディレクトリの。私はubuntu16.04を使用していますが、次の2つの簡単なコマンドを実行することで解決策を見つけます。

ステップ1: / data / dbディレクトリに権限を付与します。

sudo chmod -R 0777 /data/db

ステップ2: mongodサービスを次のように開始してみます:

sudo service mongod start

手順3: mongodサービスのステータスを確認します。

sudo service mongod status

2
手順1では、すべてのユーザーに読み取り/書き込み/実行のアクセス許可を付与します。これは使用しないでください。
Jonas Franz、

@JonasFranz、フィードバックに感謝します。その場合は、本番サーバーに0755権限を使用できます。私が間違っていたら訂正してください。
Jitendra、

3

ルートにデータベースディレクトリを配置する必要がない場合data/dbは、ホームディレクトリ(mkdir -p ~/data/db)に作成できます。

次に、--dbpathオプションでMongoDBサーバーを起動できます。

mongod --dbpath=$(echo ~)/data/db

(これは、ターミナルから起動していることを前提としています。何らかの奇妙な理由によりmongod、ホームディレクトリパスとして〜を受け入れないため、bashエコー置換の手口があり、と書くこともできます/home/yourusername/data/db

実際、これはである必要はなく~/data/db、どこにでも配置できます。これにより、複数のデータベースパスを使用してすべてを適切に整理できます。(何をしたいかによっては)プロダクションには最適なオプションではないかもしれませんが、開発には問題ありません。


3

私は同じ問題に対処しました:

ディレクトリを含むMongoDBディレクトリに移動し、次のコマンドbinを実行します。

sudo bin/mongod 

rootユーザーとしてMongoDBを実行すると、rootパスワードの入力を求められる場合があります。それでもMongoDBを実行できない場合は、MongoDBのデータディレクトリの権限を確認してください。入る:

ls -ld /data

またはls -l /、ディレクトリを含むディレクトリ内のすべてのディレクトリとファイルの権限を入力します/data

rootユーザーの許可モードは " rwx"である必要があります。これは、rootユーザーがファイルの読み取り、書き込み、および実行を行えることを意味します。これを実現するには、以下を使用します。

chmod 755 /data 

755/dataディレクトリのアクセス許可を " rwxr-xr-x" に設定するための8進数表記です。これは、rootユーザーが読み取り、書き込み、実行できるのに対し、「グループ」と「全員」は読み取りと実行しかできないことを意味します。

注:これを実行できない場合は、代わりに次のように入力してください。

sudo chmod 755 /data   

rootユーザーとして権限を設定します。

次に、そのステップが完了したら、次を使用して許可モードを再取得します。

ls -ld /data

これは次のようになります。

drwxr-xr-x  3 root  wheel  102 Mar  3 17:00 /data

d最初に" " について心配する必要はありません。また、アクセス許可は "を反映していることに注意してくださいrwxr-xr-x。また "を。

MongoDBディレクトリに戻り、次のように入力します。

sudo bin/mongod  

MongoDBを実行します。


2
悪い考えです。決してsudoとして実行しないでください。ディストリビューションによっては、mongodまたはmongodbへのユーザー/グループを管理するより良いソリューションがあります。このソリューションは使用しないでください。
アンディ

2

スーパーユーザーとしてコマンドを実行するだけです。

ターミナルから入力するだけ:sudo su mongod


1
このようなプログラムをスーパーユーザーとして実行することは常に悪い考えです。フォルダのアクセス許可を修正することをお
Jason


-1

これはUbuntu LTS 20.04で私にとってはうまくいきました:

$ sudo service mongod start

1
他の人にも役立つ理由を説明してください!
sauhardnc

1
実際の理由の説明、実際のコードスニペット、問題を根絶するために実行する手順など、より詳しい洞察で解決策を詳しく説明してください。詳細については、StackOverflowのガイドラインをご覧ください。
Kapil Raghuwanshi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.