MongoDB funktioniert nicht. "FEHLER: Datenbankpfad (/ data / db) existiert nicht."


71

Ich erhalte die folgende Fehlermeldung, wenn ich versuche, "mongod" im Terminal auszuführen. Ich habe versucht, den Computer zu deinstallieren, neu zu installieren und neu zu starten. Alle Vorschläge, wie man es zum Laufen bringt, wären erstaunlich.

ERROR:

dbpath (/data/db) does not exist.
 Create this directory or give existing directory in --dbpath.
 See http://dochub.mongodb.org/core/startingandstoppingmongo

Randnotiz: Node hat ungefähr zur gleichen Zeit, als ich diesen Fehler bekam, auch die Arbeit an meinem Computer eingestellt.

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: failed to connect to [localhost:27017]

Jede Hilfe wäre sehr dankbar!


4
Haben Sie die Anweisungen in der Fehlermeldung befolgt?
JohnnyHK

Antworten:


186

Dies sollte funktionieren, um sicherzustellen, dass das Verzeichnis an der richtigen Stelle eingerichtet ist, damit Mongo es finden kann:

sudo mkdir -p /data/db/

sudo chown `id -u` /data/db


6
Genial, aber was passiert hier?
NYC Tech Engineer

26
mkdir erstellt ein Verzeichnis, in dem mongo seine Daten speichern möchte. Mit -p können Sie ein Verzeichnis und Unterverzeichnisse in einer Zeile erstellen. (Ohne -p wird eine Fehlermeldung angezeigt, wenn das Verzeichnis 'data' noch nicht vorhanden ist.) In der zweiten Zeile werden Berechtigungen festgelegt, damit Mongo in dieses Verzeichnis schreiben kann. ('chown' ändert den Besitzer einer Datei - CHange OWNer.)
lpappone

2
Entschuldigung für die dumme Frage, aber was bedeutet das, um den Besitzer des Verzeichnisses zu ändern? Ich meine ... Wo spezifizierst du, dass speziell Mongo in dieses Verzeichnis schreiben kann?
André Pena

@andrapena Sie machen Ihren Benutzer zum Eigentümer des Verzeichnisses. Jeder Prozess, den Ihr Benutzer erzeugt, einschließlich Mongodb, hat die gleichen Rechte wie Ihr Benutzer. Vorher hatten Sie diese Rechte nicht, also mussten Sie sudodas Verzeichnis erstellen. Dies sudobedeutet, dass Sie den folgenden Befehl als Root- Benutzer ausführen , der vollen Zugriff auf Ihr System hat.
Nearoo

Aber was bedeutet "id -u"? Und wer sollte der Eigentümer des Verzeichnisses 'data / db' sein?
Kokodoko


7

Ich habe das Problem gelöst mit:

sudo mongod --dbpath=/var/lib/mongodb und dann Mongo, um auf die Mongodb-Shell zuzugreifen.


2

Ändern Sie den Benutzer des neuen Datenverzeichnisses:

chown mongodb [rute_directory]

Versuchen Sie es ein anderes Mal, um den Mongo-Dienst zu starten

Service Mongod Start

Damit löse ich das gleiche Problem.


1

Daemons (normalerweise endend mit d) werden normalerweise als Dienste gestartet. Durch das Starten des Dienstes (Daemon) kann mongodb wie geplant funktionieren (ohne Berechtigungsänderungen, wenn es sich gut in Ihre Distribution integrieren lässt). Ich starte es mit dem Dienst mongodb, anstatt mongod direkt zu starten - in der Distribution mit systemd enable beim Start und dann wie folgt ausführen:

sudo systemctl enable mongodb    
sudo systemctl start mongodb

oder in der Distribution mit Upstart (wenn Sie / etc / init haben) oder init (wenn Sie /etc/init.d haben) ( https://www.tecmint.com/systemd-replaces-init-in-linux/ ) Führen Sie stattdessen Folgendes aus:

sudo service mongodb enable
sudo service mongodb start

Wenn Sie eine Distribution mit rc ("Befehle ausführen") wie Gentoo (Einstellungen in /etc/init.d) ( https://forums.gentoo.org/viewtopic-t-854138-start-0.html ) ausführen ::

rc-update add mongodb default 
/etc/init.d/mongodb start 

In einer Distribution / Version von FreeBSD, die noch rc hat (überprüfen Sie, ob Ihre Version auf systemd umgestellt wurde, andernfalls siehe unten):

  • Fügen Sie /etc/rc.conf die folgende Zeile hinzu:

    mongod_enable = "JA"

  • dann:

    sudo service mongod start

Nach dem Starten des Dienstes kann ein nicht privilegierter Benutzer mongo verwenden, und jeder Benutzer verfügt über separate Daten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.