it-swarm.com.de

Mongod beschwert sich darüber, dass es keinen Ordner/data/db gibt

Ich benutze meinen neuen Mac heute zum ersten Mal. Ich folge dem Leitfaden "Erste Schritte" auf mongodb.org bis zu dem Schritt, in dem das Verzeichnis/data/db erstellt wird. Übrigens, ich habe die Homebrew-Route benutzt. 

Also öffne ich ein Terminal, und ich glaube, ich bin im so genannten Home-Verzeichnis. Wenn ich "ls" mache, sehe ich Ordner mit Desktop-Anwendungsfilmen, Musikbildern, Dokumenten und Bibliothek.

Also habe ich eine 

mkdir -p /data/db

erstens sagt es die Erlaubnis verweigert. Ich habe anderthalb Stunden lang verschiedene Dinge ausprobiert und schließlich:

mkdir -p data/db

hat funktioniert. und wenn ich "ls", ein datenverzeichnis und darin verschachtelt ein db-ordner vorhanden ist.

dann feuere ich mongod an und es klagt, dass ich keine daten/db finde

Habe ich etwas falsch gemacht?

Jetzt habe ich das gemacht 

Sudo mkdir -p /data/db

und wenn ich ein "ls" mache, sehe ich das Datenverzeichnis und das Datenbankverzeichnis. im db dir ist aber absolut nichts drin und wenn ich jetzt mongod renne

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

EDIT Fehlermeldung für

Sudo chown mongod:mongod /data/db

chown: mongod: Invalid argument

Danke euch allen!

364
Nik So

Sie haben das Verzeichnis an der falschen Stelle erstellt

/ data/db bedeutet, dass es sich direkt unter dem Stammverzeichnis '/' befindet, wohingegen Sie 'data/db' (ohne das führende /) erstellt haben, wahrscheinlich nur in einem anderen Verzeichnis, z. B. im Verzeichnis '/ root'.

Sie müssen dieses Verzeichnis als root erstellen.

Entweder müssen Sie Sudo verwenden, z. Sudo mkdir -p /data/db

Oder Sie müssen su - tun, um Superuser zu werden, und dann das Verzeichnis mit mkdir -p /data/db erstellen.


Hinweis: 

MongoDB hat auch eine Option, mit der Sie das Datenverzeichnis an einem anderen Ort erstellen können. Dies ist jedoch im Allgemeinen keine gute Idee, da dies Dinge wie die DB-Wiederherstellung nur geringfügig kompliziert, da Sie den Datenbankpfad immer manuell angeben müssen. Ich würde das nicht empfehlen.


Bearbeiten:

die Fehlermeldung, die Sie erhalten, ist "Sperrdatei kann nicht erstellt/geöffnet werden: /data/db/mongod.lock errno: 13 Berechtigung verweigert". Das Verzeichnis, das Sie erstellt haben, scheint nicht die richtigen Berechtigungen und den richtigen Besitz zu haben -- Es muss von dem Benutzer beschreibbar sein, der den MongoDB-Prozess ausführt.

Führen Sie die folgenden Schritte aus, um die Berechtigungen und den Besitz des Verzeichnisses '/ data/db /' anzuzeigen: (So sollten die Berechtigungen und der Besitz aussehen)

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

Die linke Seite 'drwxr-xr-x' zeigt die Berechtigungen für den Benutzer, die Gruppe und andere. 'mongod mongod' zeigt an, wer das Verzeichnis besitzt und zu welcher Gruppe dieses Verzeichnis gehört . Beide werden in diesem Fall als 'mongod' bezeichnet. 

Wenn Ihr '/ data/db'-Verzeichnis nicht die obigen Berechtigungen und Besitzrechte besitzt, führen Sie dies aus:

Prüfen Sie zunächst, welchen Benutzer und welche Gruppe Ihr Mongo-Benutzer hat:

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

Sie sollten einen Eintrag für mongod in/etc/passwd haben, da es ein Daemon ist.

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

Sie können auch den Benutzernamen und den Gruppennamen wie folgt verwenden: (Sie finden sie in/etc/passwd und/etc/group)

Sudo chown -R mongod:mongod /data/db 

das sollte es klappen ..

In den folgenden Kommentaren haben einige Leute dies verwendet:

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

oder 

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

Der Nachteil ist, dass $ USER ein Konto ist, das über eine Anmelde-Shell verfügt. Die Daemons sollten aus Sicherheitsgründen idealerweise keine Shell haben. Aus diesem Grund sehen Sie/bin/false im grep der Kennwortdatei oben.

Hier können Sie die Bedeutung der Verzeichnisberechtigungen besser verstehen:

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

Vielleicht sehen Sie sich auch eines der Tutorials an, die Sie über Google finden können: "UNIX für Anfänger"

534
Tilo

Nachdem Sie den gleichen Fehler wie Nik bekommen haben

chown: id -u: Ungültiges Argument

Ich fand heraus, dass dies anscheinend auf die falsche Art von Anführungszeichen zurückzuführen war (sollte backquotes sein) Ubuntu Forums

Stattdessen habe ich einfach gebraucht 

Sudo chown $ USER/data/db

als alternative und jetzt hat mongod die nötigen rechte.

102
jagough

Das funktioniert für mich in Kommentaren: 

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

Erstellen Sie den Ordner.

Sudo mkdir -p /data/db/

Erlauben Sie sich die Erlaubnis für den Ordner.

Sudo chown `id -u` /data/db

Dann können Sie mongod ohne Sudo ausführen. Funktioniert auf OSX Yosemite

63
Connor Leech

Um diesen Fehler unter OS X zu beheben, habe ich den Dienst neu gestartet und gestoppt: $ brew services restart mongodb $ brew services stop mongodb

Dann lief ich mongod --config /usr/local/etc/mongod.conf und das Problem war weg.

Der Fehler schien nach dem Upgrade des mongodb-Homebrew-Pakets aufzutreten.

25
orluke

Installation durch Brühen auf einem Mac, bei dem YOUR_USER_NAME und staff die Gruppe ist

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

Wenn Sie Mongo ohne Argumente ausführen, wird davon ausgegangen, dass Sie auf dem Produktionscomputer ausgeführt werden. Verwenden Sie daher die Standardspeicherorte.

für die Verwendung Ihrer eigenen Datenbank (dev oder nur eine andere): 

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

Ich habe dieses Problem gelöst, indem ich die Ordner/data/db mit meinem Windowmanager erstellt habe. Ich habe es zuerst über das Terminal versucht, und um einen Ordner im Stammverzeichnis zu erstellen, musste ich Sudo verwenden.

Ich bin einfach mit dem Finder ins Stammverzeichnis gegangen und habe mit 'New Folder' einen neuen Ordner erstellt. Total für mich gearbeitet.

Hinweis: Ich verwende OSX.

4
Jupo

Ihr Befehl hat die Verzeichnisstruktur im aktuellen Ordner erstellt, nicht im Stammverzeichnis Ihres Computers (dies ist der fehlende /).

Der erste Befehl war richtig, aber da Sie versuchen, einen Ordner in /, einem geschützten Verzeichnis, zu erstellen, müssen Sie ihm Sudo voranstellen. Sie werden dann nach Ihrem Passwort gefragt.

Der vollständige Befehl wäre also:

$ Sudo mkdir -p /data/db
3
Russell

Sie müssen / data/db ... erstellen. Dies ist ein Verzeichnis mit dem Namen / data / in Ihrem Stammverzeichnis (dh /) und Unterordner dort genannt / db / ...

Sie erhalten Berechtigungsfehler, da Sie in MacOS mit Sudo ein Verzeichnis in Ihrem Stammverzeichnis erstellen müssen. Mit Sudo können Sie als Administrator Befehle ausführen.

Also führe das stattdessen aus ...

$ Sudo mkdir -p /data/db

Dadurch werden Sie zur Eingabe eines Kennworts aufgefordert. Es ist das gleiche Kennwort, das Sie zum Ändern der Systemeinstellungen verwenden (dieses kleine Dialogfeld, das sich öffnet, wenn Sie versuchen, in den Systemeinstellungen von Beispiel zu ändern) und wahrscheinlich das gleiche wie beim Anmelden.

3
Justin Jenkins

Ich tat

brew install mongodb

am 01.01.2018 und das gab mir mongodb Version 3.6.2.

Angeregt durch die Antwort von orluke oben habe ich es gerade versucht

$ brew services restart mongodb

und alles wurde lebendig. Mein mongoose.createConnection()-Anruf hat getan, was ich wollte. Die GUI MongoDB Compass , die Community-Version, würde eine Verbindung herstellen. Ich habe Compass verwendet, um die local.startup_log-Sammlung anzusehen. Das hatte ein Dokument, das Protokoll von mir, als ich gerade den MongoDB-Dienst startete, und das hatte es

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

und tatsächlich gab es eine solche Datei:

$ 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

und es gab ein /usr/local/var/mongodb-Verzeichnis mit vielen obskuren Dateien. So scheint also die Installation jetzt zu funktionieren. 

Ich bin nicht sicher, ob brew services restart den Dienst so konfiguriert, dass er beim Anmelden ausgeführt wird. So tat ich 

brew services stop mongodb
brew services start mongodb

und hoffte, dass es nach dem Neustart erneut startet. Und das tat es tatsächlich. Tatsächlich denke ich jetzt, dass das Richtige nach der ersten Installation richtig ist

brew services start mongodb

und das sollte den Dienst starten und nach dem Neustart neu starten.

3
emrys57

Ich hatte dieses Problem mit einem bestehenden Mongodb-Setup. Ich bin immer noch nicht sicher, warum es passiert ist, aber aus irgendeinem Grund konnte der Mongod-Prozess die Datei mongod.config nicht finden .. Da er die Konfigurationsdatei nicht finden konnte, versuchte er, die DB-Dateien in/data/db zu finden ein Ordner, der nicht vorhanden ist. Die Konfigurationsdatei war jedoch immer noch verfügbar. Ich stellte also sicher, dass der Prozess über Berechtigungen für die Konfigurationsdatei verfügt, und führt den Mongod-Prozess mit dem Flag --config wie folgt aus:

mongod --config /etc/mongod.conf

In der config-Datei selbst hatte ich diese Einstellung:

storage:
  dbPath: /var/lib/mongodb

Und so konnte der Prozess den richtigen DB-Ordner wiederfinden.

3
Tal Delbari

Sie versuchen, ein Verzeichnis zu erstellen, auf das Sie keinen Root-Zugriff haben.

Zum Testen von Mongodb verwende ich einfach ein Verzeichnis aus meinem Benutzerverzeichnis wie:

cd
mkdir -p temp/
mongod --dbpath .

Dadurch wird eine Mongo-Datenbank in Temp/aus Ihrem aktuellen Arbeitsverzeichnis erstellt

2
EhevuTov

Nur ein kurzer Hinweis:

Wenn Sie versucht haben, Mongod auszuführen, ohne zuvor die Berechtigungen zu ändern, haben Sie wahrscheinlich eine mongod.lock-Datei (und einige andere Dateien) im Verzeichnis/data/db. Selbst nachdem Sie die Berechtigungen für das Verzeichnis/data/db geändert haben, um Zugriff auf Ihren $ USER zu erhalten, wird weiterhin die Meldung "Sperrdatei kann nicht erstellt/geöffnet werden: /data/db/mongod.lock errno: 13" Berechtigung verweigert " Error. Wenn Sie ls -al/data/db ausführen, werden Sie wahrscheinlich feststellen, dass die Berechtigungen für die einzelnen Dateien immer noch auf root für den Benutzer festgelegt sind, nicht auf Ihren $ USER. Sie sollten die Datei mongod.lock und die anderen ebenfalls entfernen. Wenn Sie dann mongod erneut ausführen, sollte alles funktionieren und Sie können überprüfen, ob die Dateiberechtigungen mit den Verzeichnisberechtigungen übereinstimmen, indem Sie erneut ls -al ausführen.

2
whiny_nil

Bis zu diesem Datum dachte ich auch, dass wir den Ordner/data/db zum Starten des mongod-Befehls erstellen müssen. 

Aber vor kurzem habe ich versucht, Mongod mit dem Dienstbefehl zu starten, und es hat für mich funktioniert, und es war nicht nötig, das Verzeichnis/data/db zu erstellen.

service mongod start

Um den Status von Mongod zu überprüfen, können Sie den folgenden Befehl ausführen.

service mongod status
1
Devendra Bhat

Geben Sie "id" in das Terminal ein, um die verfügbaren Benutzer-IDs anzuzeigen, die Sie angeben können 

"Sudo chown -R idname / data/db"

Das hat sich für mich herausgestellt! Hoffe, das löst dein Problem.

0
Prakhar Agrawal

Ich habe immer die folgende Fehlermeldung erhalten, als ich versuchte, mongodb zu starten.

"shutting down with code:100" 

Ich habe den folgenden Befehl verwendet:

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

Der Fix für mich war, dass ich das "=" Zeichen nicht brauchte und dies den Fehler verursachte. So tat ich 

./mongod --dbpath ~/mongo-data

Ich wollte das nur rausschmeißen, weil der Fehler in keiner Weise angibt, dass dies das Problem ist. Ich hätte fast den Inhalt des Verzeichnisses ~/mongo-data entfernt, um zu sehen, ob das geholfen hat. Ich bin froh, dass ich daran gedacht habe, dass cli args manchmal das "=" - Zeichen nicht verwenden.

0
Cloudish123

Diese Lösung löst mein Problem

  1. Erstellen Sie ein Verzeichnis als 

    Sudo mkdir -p/data/db

  2. Dadurch wird ein Verzeichnis mit dem Namen db erstellt und dann versucht, mit Befehlen zu beginnen

    Sudo Mongod

Wenn Sie einen weiteren Fehler oder ein anderes Problem beim Starten von Mongod erhalten, können Sie das Problem unter

Listener konnte nicht eingerichtet werden: SocketException: Adresse wird bereits verwendet Wenn Sie feststellen, dass ein anderer Fehler vorliegt, müssen Sie den laufenden Prozess von Mongod abbrechen, indem Sie in terminal als eingeben

ps ax | grep mongod
Sudo kill ps_number

und finden Sie den mongod-laufenden Port und beenden Sie den Prozess . Eine andere Möglichkeit besteht darin, beim Starten von mongod einen speziellen Port zu erstellen

Sudo mongod --port 27018
0
Mehedi Abdullah

In aktuelleren Versionen von MongoDB habe ich 3.2.10, es wird standardmäßig in gespeichert 

/var/lib/mongodb

0
illcrx