web-dev-qa-db-ja.com

Mongodは/ data/dbフォルダがないと文句を言う

私は今日初めて私の新しいMacを使っています。私はmongodb.orgの始めの手引きに従って/ data/dbディレクトリを作成するステップまで続けています。ところで、私は自作ルートを使いました。

だから私は端末を開いて、私はあなたがホームディレクトリと呼んだものにいると思います、私が "ls"をするとき、私はデスクトップアプリケーション映画音楽写真ドキュメントとライブラリのフォルダを見ます。

だから私はしました

mkdir -p /data/db

最初に、それは許可が拒否されたと言います。私は30分、そして最後に:

mkdir -p data/db

働いた。そして、私が "ls"、データのディレクトリとその中に入れ子になったdbフォルダが存在します。

それから私はmongodを起動し、それはdata/dbを見つけられないことについて不平を言って

私は何か間違ったことをした?

今私はやった

Sudo mkdir -p /data/db

そして、 "ls"を実行すると、data dirとdb dirが表示されます。ただし、dbディレクトリの中には、絶対に何もないので、今mongodを実行したとき

Sun Oct 30 19:35:19 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
Sun Oct 30 19:35:19 dbexit: 
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to close listening sockets...
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to flush diaglog...
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to close sockets...
Sun Oct 30 19:35:19 [initandlisten] shutdown: waiting for fs preallocator...
Sun Oct 30 19:35:19 [initandlisten] shutdown: lock for final commit...
Sun Oct 30 19:35:19 [initandlisten] shutdown: final commit...
Sun Oct 30 19:35:19 [initandlisten] shutdown: closing all files...
Sun Oct 30 19:35:19 [initandlisten] closeAllFiles() finished
Sun Oct 30 19:35:19 [initandlisten] shutdown: removing fs lock...
Sun Oct 30 19:35:19 [initandlisten] couldn't remove fs lock errno:9 Bad file descriptor
Sun Oct 30 19:35:19 dbexit: really exiting now

のエラーメッセージが表示される

Sudo chown mongod:mongod /data/db

chown: mongod: Invalid argument

みんな、ありがとう!

391
Nik So

ディレクトリを間違った場所に作成しました

/ data/dbはそれが '/'ルートディレクトリの直下にあることを意味しますが、 '/ root'ホームディレクトリのようなおそらく別のディレクトリの中に '/ data'を付けずに 'data/db'を作成しました。

このディレクトリをrootとして作成する必要があります

どちらかSudoを使う必要があります、例えばSudo mkdir -p /data/db

または、スーパーユーザーになるにはsu -を実行してからmkdir -p /data/dbでディレクトリを作成する必要があります。


注意:

MongoDBには、データディレクトリを別の場所に作成できるオプションもありますが、通常は手動でdb-pathを指定する必要があるため、DBリカバリなどの作業が少し複雑になるため、あまりお勧めできません。それはお勧めできません。


編集する

エラーメッセージは "ロックファイルを作成/開くことができません:/data/db/mongod.lock errno:13パーミッションが拒否されました" 。あなたが作成したディレクトリは正しい許可と所有権を持っていないようです - それはMongoDBプロセスを実行するユーザーによって書き込み可能である必要があります。

'/ data/db /'ディレクトリのアクセス権と所有権を確認するには、次の操作を行います。(これがアクセス権と所有権の外観です)

$ ls -ld /data/db/
drwxr-xr-x 4 mongod mongod 4096 Oct 26 10:31 /data/db/

左側の「drwxr-xr-x」は、ユーザー、グループ、その他のアクセス許可を示しています。 'mongod mongod'は、誰がディレクトリを所有しているのか、そしてそのディレクトリがどのグループに属しているのかを示します。この場合、両方とも 'mongod'と呼ばれます。

あなたの '/ data/db'ディレクトリが上記のパーミッションと所有権を持っていない場合は、これを行ってください

まず、あなたのmongoユーザーがどんなユーザーとグループを持っているか確認してください。

# grep mongo /etc/passwd
mongod:x:498:496:mongod:/var/lib/mongo:/bin/false

デーモンであるため、/ etc/passwdにmongodのエントリが必要です。

Sudo chmod 0755 /data/db
Sudo chown -R 498:496 /data/db    # using the user-id , group-id

次のように、ユーザー名とグループ名を使用することもできます(それらは/ etc/passwdと/ etc/groupにあります)。

Sudo chown -R mongod:mongod /data/db 

これでうまくいくはずです。

以下のコメントでは、何人かの人々がこれを使用しました:

Sudo chown -R `id -u` /data/db
Sudo chmod -R go+w /data/db

または

Sudo chown -R $USER /data/db 
Sudo chmod -R go+w /data/db

欠点は、$ USERがログインシェルを持つアカウントであることです。セキュリティ上の理由から、デーモンにはシェルを使用しないことが理想的です。そのため、上記のパスワードファイルのgrepに/ bin/falseが表示されます。

ディレクトリ許可の意味をよりよく理解するためにここにチェックして下さい:

http://www.perlfect.com/articles/chmod.shtml

Googleで見つけることができるチュートリアルの1つ、「初心者のためのUNIX」もチェックしてください。

553
Tilo

Nikと同じエラーが出た後

chown:id -u:無効な引数

私はこれが明らかに間違ったタイプの引用符を使っていることが原因であることに気づいた( backquotes であったはずです) Ubuntuフォーラム

代わりに私はちょうど使用しました

Sudo chown $ USER/data/db

代替手段として、そして今やmongodはそれが必要とする権限を持っています。

106
jagough

これは私のために働きます、コメントで見つけられます:

Sudo chown -R $USER /data/db
81
Iman Mohamadi

フォルダを作成してください。

Sudo mkdir -p /data/db/

フォルダへのアクセス許可を自分に与えます。

Sudo chown `id -u` /data/db

それからmongodを使わずにSudoを実行できます。 OSXヨセミテで動作します

64
Connor Leech

OS Xでこのエラーを修正するために、サービスを再起動して停止しました。$ brew services restart mongodb $ brew services stop mongodb

それから私はmongod --config /usr/local/etc/mongod.confを実行しました、そして問題は消えました。

Mongodb自作パッケージをアップグレードした後にエラーが発生したようです。

28
orluke

YOUR_USER_NAMEと staff がグループになっているMacでbrewを通してインストールする

Sudo mkdir -p /data/db
Sudo chmod +x+r+w /data/db/
Sudo touch /data/db/mongod.lock
Sudo chown YOUR_USER_NAME:staff /data/db
Sudo chmod +x+r+w /data/db/mongod.lock
Sudo chown YOUR_USER_NAME:staff /data/db/mongod.lock
20
Gal Bracha

引数なしでmongoを実行すると、本番用マシンで実行していると想定されるため、デフォルトの場所が使用されます。

あなた自身のデータベース(devか単に違うもの)を使うため:

./bin/mongod --dbpath ~/data/db
12
loreii

ウィンドウマネージャを使って/ data/dbフォルダを作成することで、まったく同じ問題を解決しました。最初は端末でやってみましたが、ルートディレクトリにフォルダを作成するにはSudoを使わなければなりませんでした。

Finderを使ってルートディレクトリに移動し、 'New Folder'を使って新しいフォルダを作成しました。完全に私のために働いた。

注:私はOSXを使っています。

4
Jupo

やった

brew install mongodb

2018年2月1日にそれと私はmongodbバージョン3.6.2を与えた。

上記のorluke からの回答で促されて、私はちょうど試した

$ brew services restart mongodb

そしてすべてが生命の中に広がりました。私のmongoose.createConnection()呼び出しは私が欲しかったことをしました。コミュニティバージョンの GUI MongoDB Compass が接続します。私はlocal.startup_logコレクションを見るためにコンパスを使いました。これには1つの文書がありました。mongoDBサービスを開始したばかりの私のログです。

cmdLine:Object
    config:"/usr/local/etc/mongod.conf"

そして確かにそのようなファイルがありました:

$ more /usr/local/etc/mongod.conf
systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
net:
  bindIp: 127.0.0.1

そして/usr/local/var/mongodbディレクトリにたくさんのあいまいなファイルがありました。ですから、これでインストールはどのように機能するのでしょう。

brew services restart がログイン時にサービスを実行するように設定しているかどうかわかりません。だから私はやった

brew services stop mongodb
brew services start mongodb

そしてそれは再起動後にそれが再びそれを起動することを望みました。そして、確かにそうでした。実際には、今、私は最初のインストール後にやるべき正しいことはだと思います

brew services start mongodb

これでサービスが開始され、再起動後にサービスが再開されます。

4
emrys57

私は既存のMongodbセットアップでこの問題を抱えていました。なぜそれが起こったのかまだわかりませんが、何らかの理由でMongodプロセスがmongod.configファイルを見つけることができませんでした。 configファイルが見つからなかったため、/ data/dbという存在していないフォルダでDBファイルを見つけようとしました。しかし、設定ファイルはまだ利用可能なので、プロセスに設定ファイルへのアクセス権があることを確認し、 - configフラグを付けてmongodプロセスを次のように実行します。

mongod --config /etc/mongod.conf

設定ファイル自体では、私はこの設定をしていました:

storage:
  dbPath: /var/lib/mongodb

これが、プロセスが実際のDBフォルダを再び見つける方法です。

4
Tal Delbari

あなたのコマンドはあなたのコンピュータのルートディレクトリではなく、現在のフォルダにディレクトリ構造を作成するでしょう(それは足りない/が何であるかです)。

最初のコマンドは正しかったのですが、保護されたディレクトリである/にフォルダを作成しようとしているので、「スーパーユーザーdo」の省略形であるSudoをプレフィックスとして付ける必要があります。その後、パスワードを尋ねられます。

そのため、完全なコマンドは次のようになります。

$ Sudo mkdir -p /data/db
3
Russell

あなたは /data/db ...を作成する必要があります - それは / data / と呼ばれるディレクトリです(そして / )そしてそこにサブフォルダーと呼ばれます / db / ...

MacOSのルートディレクトリにディレクトリを作成するのに必要なため、アクセス権エラーが発生しています。 Sudo Sudoを使用すると、管理者としてコマンドを実行できます。

だから、代わりにこれを実行してください...

$ Sudo mkdir -p /data/db

これはパスワードの入力を促します。これはシステム設定を変更するのに使うのと同じパスワード(あなたがecampleのシステム環境設定で設定を変更しようとしたときに開く小さなダイアログ)です。

3
Justin Jenkins

あなたがルートアクセス権を持っていないディレクトリを作成しようとしています。

Mongodbをテストするために、私は自分のユーザーディレクトリから次のようなディレクトリを使います。

cd
mkdir -p temp/
mongod --dbpath .

これにより、現在の作業ディレクトリからmongoデータベースがtemp /に作成されます。

2
EhevuTov

ちょっとしたメモ:

最初に権限を変更せずにmongodを実行しようとした場合は、おそらく/ data/dbディレクトリにmongod.lockファイル(およびその他のファイル)があるでしょう。/data/dbディレクトリのアクセス権を変更して$ USERにアクセスできるようにしても、引き続き "ロックファイルを作成/開くことができません:/data/db/mongod.lock errno:13 Permission denied "エラー。 ls -al/data/dbを実行すると、おそらく個々のファイルに対するパーミッションが、あなたの$ USERではなく、まだrootユーザーに設定されていることがわかるでしょう。あなたはmongod.lockファイルと他のものも削除するべきです。それから、mongodをもう一度実行すると、すべてがうまくいくはずです。もう一度ls -alを実行すると、ファイルのアクセス権がディレクトリのアクセス権と一致することを確認できます。

2
whiny_nil

この日まで、私はmongodコマンドを開始するためにその/ data/dbフォルダを作成する必要があるとも思っていました。

しかし最近、私はserviceコマンドでmongodを起動しようとしました、そして、それは私のために働きました、そして/ data/dbディレクトリを作成する必要はありませんでした。

service mongod start

Mongodのステータスを確認するには、次のコマンドを実行します。

service mongod status
1
Devendra Bhat

あなたが与えることができる利用可能なユーザーIDを見るために端末で "id"をタイプしてくださいそしてそれから単にタイプしてください

"Sudo chown -R idname / data/db"

これは私のためにうまくいきました!これで問題が解決することを願っています。

0
Prakhar Agrawal

Mongodbを起動しようとしたときに、次のようなエラーが表示され続けました。

"shutting down with code:100" 

次のコマンドを使用していました。

./mongod --dbpath=~/mongo-data

私にとっての解決策は、私が "="記号を必要としていないことで、これがエラーの原因でした。だから私はやった

./mongod --dbpath ~/mongo-data

エラーが決してこれが問題であることを指定していないので、ただそこにこれを捨てたいと思いました。私は〜/ mongo-dataディレクトリの内容をほとんど削除してそれが助けになったかどうかを確認しました。 cli argsが時々 "="記号を使わないことを私は思い出しました。

0
Cloudish123

この解決策は私の問題を解決します

  1. 次のようにディレクトリを作ります。

    Sudo mkdir -p/data/db

  2. それはディレクトリをdbと名付け、コマンドで始めようとします。

    Sudo mongod

Mongodの起動に別のエラーや問題が発生した場合は、以下のように問題を見つけることができます。

リスナーの設定に失敗しました:SocketException:アドレスはすでに使用されています

ps ax | grep mongod
Sudo kill ps_number

そして、mongodの実行中のポートを見つけてプロセスを終了させます。別の方法は、mongodを次のように起動するときにスペシフィックポートを作成することです。

Sudo mongod --port 27018
0
Mehedi Abdullah

MongoDBのより新しいバージョンでは、私は3.2.10を持っています、それはにデフォルトで格納されています

/var/lib/mongodb

0
illcrx