web-dev-qa-db-de.com

MongoDB: Ausnahme in initAndListen: 20 Versuch, eine Sperrdatei in einem schreibgeschützten Verzeichnis zu erstellen:/data/db, wird beendet

Ich habe /data/db im Stammverzeichnis erstellt und ./mongod ausgeführt:

[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
98
whinytween96

Das Problem ist, dass das von Ihnen erstellte Verzeichnis /data/db dem Rootbenutzer gehört und nur von diesem beschrieben werden kann, Sie jedoch mongod als sich selbst ausführen. Es gibt mehrere Möglichkeiten, dieses Problem zu lösen, aber letztendlich müssen Sie dem betreffenden Verzeichnis die richtigen Berechtigungen geben. Wenn dies für die Produktion gedacht ist, würde ich Ihnen raten, die Dokumente zu überprüfen und sorgfältig darüber nachzudenken - Sie möchten wahrscheinlich besonders vorsichtig sein.

Wenn dies jedoch nur zum Testen ist und Sie dies nur benötigen, um zu funktionieren und weiterzukommen, können Sie dies versuchen, wodurch das Verzeichnis für jeden schreibbar wird:

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

oder dies, wodurch das Verzeichnis in Ihrem Besitz ist:

> Sudo chown -R $USER /data/db
211
Bjorn Roche

Auf einem Mac musste ich Folgendes tun:

Sudo chown -R $USER /data/db
Sudo chown -R $USER /tmp/

da sich in /tmp auch eine Datei befand, auf die Mongo ebenfalls zugreifen musste

Sie können Mongo als root verwenden, funktioniert für mich:

$ Sudo mongod
33

Wenn Ihr System SELinux verwendet, stellen Sie sicher, dass Sie den richtigen Kontext für das erstellte Verzeichnis verwenden:

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

und klon den Kontext mit:

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

Ich hatte das gleiche Problem und die folgende Lösung löste dieses Problem. Sie sollten die folgende Lösung versuchen.

Sudo mkdir -p/data/db
Sudo chown -R 'Benutzername'/data/db

15
hamdi

Schöne Lösungen, aber ich frage mich, warum niemand die Lösung für Fenster gibt.

Wenn Sie Windows verwenden, müssen Sie nur die cmd als Administrator ausführen.

Ich habe genau das gleiche Problem gesehen und gelöst, und hier sind die Erklärungen Schritt für Schritt:

Bevor Sie alles andere ausprobieren, wechseln Sie einfach in das mongodb-Verzeichnis, das das bin-Verzeichnis für mongodb enthält, und verwenden Sie einfach den Befehl im Terminal:

Sudo bin/mongod  

wenn Sie mongodb als root-Benutzer ausführen, werden Sie möglicherweise aufgefordert, das Passwort als root-Benutzer einzugeben. Wenn Sie den Mongodb immer noch nicht ausführen können, machen wir folgendes:

Lassen Sie uns zunächst den Erlaubnismodus des Datenverzeichnisses von Mongodb anzeigen, indem Sie das Terminal eingeben:

ls -ld/data

(p.s oder wir können einfach "ls -l /" eingeben, um die Berechtigungsmodi aller Verzeichnisse und Dateien im Stammverzeichnis einschließlich des Verzeichnisses/data anzuzeigen.)

Der Berechtigungsmodus für den Root-Benutzer sollte "rwx" sein, dh der Root-Benutzer kann die Dateien lesen, schreiben und ausführen. Um dies zu erreichen, verwenden wir den Befehl, um den Berechtigungsmodus durch Eingabe von Terminal zu ändern :

chmod 755/data  

(dh 755 ist eine bestimmte oktale Notation für das Argument für die Berechtigungseinstellung.) __ Dies setzt die Berechtigungsmodi des/data-Verzeichnisses auf "rwxr-xr-x", d Benutzer und alle anderen können nur lesen und ausführen.

Hinweis: Wenn Sie diesen Vorgang nicht ausführen können, geben Sie stattdessen Folgendes ein:

Sudo chmod 755/Daten  

um die Berechtigung als root-Benutzer festzulegen.

Wenn dieser Schritt abgeschlossen ist, erfassen wir die Berechtigungsmodi erneut, indem Sie erneut Eingeben: ls -ld/data

und die Ausgabe sollte so aussehen:

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

(Sie brauchen sich nicht um das "d" am Anfang zu kümmern) und bemerken, dass die Einstellung "rwxr-xr-x" jetzt abgeschlossen ist.

Dann sind wir fertig und Sie können jetzt zum mongodb-Verzeichnis zurückkehren und Folgendes eingeben: 

Sudo bin/mongod  

die Mongodb laufen lassen.

Hoffe das hilft.

2
yifan li

Wenn Sie Ihre Mongodb-Protokolle überprüfen und Sie einen solchen Fehler erhalten, folgen Sie einfach den Schritten, die ich gemacht habe. Es tritt aufgrund von Berechtigungsproblemen mit Ihrem /data/db-Verzeichnis auf. Ich verwende ubuntu16.04 und finde die Lösung mit zwei einfachen Befehlen wie folgt.

Schritt 1: Erlaube das Verzeichnis/data/db: 

Sudo chmod -R 0777 /data/db

Schritt 2: Versuchen Sie, den Mongod-Service zu starten:

Sudo service mongod start

Schritt 3: Status des Mongod-Dienstes überprüfen:

Sudo service mongod status
1
Jitendra

sie müssen den Befehl nur als Superuser ausführen:

tippen Sie einfach vom Terminal aus: Sudo su mongod

0
David Noleto