Betreibe MongoDB 2.2 auf Ubuntu und wenn ich renne:
Sudo mongod
Ich erhalte eine Fehlermeldung, dass/data/db nicht gefunden werden kann. Die Datenbank befindet sich nicht dort. In mongod.conf ist der Datenbankpfad als Ubuntu 10gen-Standardwert /var/lib/mongodb
angegeben, in dem sich die Datenbank befindet. Scheint, als würde mongod
die conf-Datei nicht finden. Also wenn ich renne:
Sudo mongod -f /etc/mongodb.conf
Der Server wird ordnungsgemäß gestartet, und die Ausgabe wird in der Protokolldatei protokolliert: /var/log/mongodb/mongodb.log
. Alles ist glücklich. Ich kann zu einer anderen Shell wechseln, mich bei Mongo Shell anmelden, die Datenbanken anzeigen und Abfragen ausführen.
Also kündige ich das und versuche, als Dienst zu laufen:
> Sudo status mongodb
mongodb stop/waiting
> Sudo start mongodb
mongodb start/running, process 10468
Sieht bisher gut aus, aber der Mongo-Server wurde nicht gestartet. Ein anderes ausführen:
> Sudo status mongodb
mongodb stop/waiting
> mongo
MongoDB Shell version: 2.2.0
connecting to: test
Sat Sep 1 19:07:43 Error: couldn't connect to server 127.0.0.1:27017 src/mongo/Shell/mongo.js:91
exception: connect failed
"test" ist nicht die richtige Datenbank und in der Protokolldatei wird nichts angezeigt.
Ich weiß nicht, was falsch sein könnte. Ich habe die Upstart-Skripte überprüft und sie scheinen in Ordnung zu sein. /etc/init/mongodb.conf
läuft:
mongodb --exec /usr/bin/mongod -- --config /etc/mongodb.conf
OK, das alles hängt von den Berechtigungen ab, aber nehmen wir es Schritt für Schritt. Wenn Sie Sudo mongod
ausführen, wird keine Konfigurationsdatei geladen, sondern es beginnt buchstäblich mit dem in den Standardeinstellungen - Port 27017 , Datenbankpfad von/data/db usw. kompilierten Fehler, dass der Ordner nicht gefunden werden kann. Der "Ubuntu-Standard" wird nur verwendet, wenn Sie auf die Konfigurationsdatei zeigen (wenn Sie den Dienstbefehl verwenden, wird dies für Sie hinter den Kulissen erledigt).
Als Nächstes haben Sie es so ausgeführt:
Sudo mongod -f /etc/mongodb.conf
Wenn vorher keine Probleme aufgetreten sind, wird es jetzt - Sie haben den Prozess mit Ihrer normalen Konfiguration (die auf Ihren üblichen DB-Pfad und das Protokoll zeigt) als Rootbenutzer ausgeführt. Das bedeutet, dass sich in diesem normalen MongoDB-Ordner jetzt eine Reihe von Dateien mit der Benutzergruppe: root:root
befindet.
Dies führt zu Fehlern, wenn Sie versuchen, es als normaler Dienst erneut zu starten, da der mongodb-Benutzer (unter dem der Dienst versuchen wird, als auszuführen) keine Berechtigung zum Zugriff auf diese root:root
-Dateien haben wird in die Protokolldatei schreiben, um Ihnen Informationen zu geben.
Um es als normalen Dienst auszuführen, müssen wir diese Berechtigungen korrigieren. Stellen Sie zunächst sicher, dass MongoDB derzeit nicht als Root ausgeführt wird.
cd /var/log/mongodb
Sudo chown -R mongodb:mongodb .
cd /var/lib/mongodb
Sudo chown -R mongodb:mongodb .
Das sollte das Problem beheben (vorausgesetzt der Benutzer: group ist mongodb:mongodb
), obwohl es wahrscheinlich am besten ist, dies mit einem ls -al
oder ähnlichem zu überprüfen, um sicher zu sein. Sobald dies geschehen ist, sollten Sie in der Lage sein, den Dienst erneut erfolgreich zu starten.
Stellen Sie zunächst sicher, dass der Benutzer/die Gruppe mongodb berechtigt ist, in das Verzeichnis data und die Datei log zu schreiben:
$ Sudo chown -R mongodb: mongodb/var/lib/mongodb /.
$ Sudo Chown -R Mongodb: Mongodb /var/log/mongodb.log
Starten Sie MongoDB als Daemon (Hintergrundprozess) mit dem folgenden Befehl:
$ mongod --fork --dbpath/var/lib/mongodb/--smallfiles --logpath /var/log/mongodb.log --logappend
Um Herunterfahren von MongoDB die Mongo-CLI einzugeben, auf den Administrator zuzugreifen und den Befehl zum Herunterfahren ausgeben:
$ ./mongo
> admin verwenden
> db.shutdownServer ()
Ref: http://www.mongodb.org/display/DOCS/Starting+and+Stopping+Mongo
Ich hatte auch das gleiche Problem. Also ging ich zu cd/var/lib/mongodb/und löschte die Datei mongod.lock.
Nachdem ich alle Erlaubnis in den Daten-, Journal- und Protokollordnern geprüft hatte, wie von @nelsonic vorgeschlagen, wurde mein Problem gelöst, indem die Erlaubnis erteilt wurde, die Datei im Ordner/tmp zu sperren
Sudo chown mongod:mongod mongodb-27017.sock
Ich habe es als Amazon-Linux-Instanz von AWS ausgeführt. Ich fand das heraus, indem ich es als mongod-Benutzer wie unten ausgeführt ausführte und dann den Fehlercode untersuchte. Dies kann für andere Problemlösungen hilfreich sein.
Sudo -S -u mongod mongod -f /etc/mongod.conf
Nichts hat für mich funktioniert, dann habe ich festgestellt, dass es ein Berechtigungsproblem im /tmp
-Verzeichnis gab:
Sudo chmod 1777 /tmp
Sudo chown root:root /tmp
Mein mongodb wurde gestartet, als er von der Befehlszeile aus als mongod-Benutzer gestartet wurde, aber nicht als Dienst mit Benutzer = mongod .
In/etc/selinux/config habe ich von enforcing nach permissive gewechselt und neu gestartet. Es ist jetzt in Ordnung.
Keine der obigen Antworten funktionierte für mich. Ich fand es schließlich heraus, indem ich das Init-Skript mit folgendem debugging:
Sudo bash -x /etc/init.d/mongodb start
Und zu sehen, dass es den falschen Konfigurationspfad an Mongod weitergab. Ich habe einfach die Zeile in /etc/init.d/mongodb von "CONF =/etc/mongodb.conf" in "CONF =/etc/mongod.conf" geändert. Version 2 verwendet die vorherige Version. Bei der Installation von Version 3 wurde die Datei /etc/mongod.conf mit dem neuen Format hinzugefügt, das Init-Skript jedoch anscheinend nicht aktualisiert.
UPDATE: Ich habe jetzt ein viel unbekannteres Problem, bei dem das Init-Skript funktioniert, aber nur, wenn ich es mit "Sudo bash -x /etc/init.d/mongodb start" und nicht mit "Sudo service mongodb start" ausführen. Gleiches für Stop.
In diesen Tagen kann dieser Fehler auftreten, wenn Sie Mongod aktualisiert haben und eine alte Datenbank ausgeführt wird. Mongod verwendet standardmäßig die WiredTiger-Engine, und Sie verfügen über eine mmapv1-Datenbank
bearbeiten Sie die Engine-Einstellung in /etc/mongod.conf
# engine: wiredTiger
engine: mmapv1
Vorsicht - YAML reagiert auf Leerzeichen
journalctl/systemd sieht dieses Problem nicht. Überprüfen Sie das Mongod-Protokoll in /var/log/mongodb/mongod.log
Ich gehe davon aus, dass Sie die Datenbank mit den hier beschriebenen Schritten konvertieren können
https://docs.mongodb.com/manual/tutorial/change-standalone-wiredtiger/
Nachdem keine der obigen Antworten für mich funktioniert hat, löschte Mongo das Löschen meiner Log-Datei wieder.
überprüfen Sie auch Ihren Festplattenspeicher, da der Dienst die Protokolle nicht anhängen kann, wenn/var/log voll ist.
Versuchen Sie einfach diesen Befehl:
Sudo chown mongodb /tmp/mongodb-27017.sock