MongoDB startet nicht nach dem Ändern des Datenverzeichnisses


10

Ich habe eine mongodbInstanz mit yum installiert . . Jetzt funktioniert alles gut. Ich habe den Dienst mit gestartet service mongod start. Es funktioniert gut. Dann habe ich das data directoryund log pathin der Konfigurationsdatei geändert . Ich habe den Server erneut gestartet und den Dienst gestartet. Aber ich bekomme den folgenden Fehler:

Restarting mongod (via systemctl):  Job for mongod.service failed. See 'systemctl status mongod.service' and 'journalctl -xn' for details.
                                                           [FAILED]

Wenn ich gebe, systemctl status mongod.servicebekomme ich folgendes:

 Loaded: loaded (/etc/rc.d/init.d/mongod)
   Active: failed (Result: exit-code) since Wed 2015-03-18 11:35:56 IST; 22s ago
  Process: 10672 ExecStop=/etc/rc.d/init.d/mongod stop (code=exited, status=0/SUCCESS)
  Process: 10841 ExecStart=/etc/rc.d/init.d/mongod start (code=exited, status=1/FAILURE)
 Main PID: 10509 (code=exited, status=0/SUCCESS)

Mar 18 11:35:56 localhost systemd[1]: Starting SYSV: Mongo is a scalable, document-oriented database....
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session opened for user mongod by (uid=0)
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session closed for user mongod
Mar 18 11:35:56 localhost mongod[10841]: Starting mongod: [FAILED]
Mar 18 11:35:56 localhost systemd[1]: mongod.service: control process exited, code=exited status=1
Mar 18 11:35:56 localhost systemd[1]: Failed to start SYSV: Mongo is a scalable, document-oriented database..
Mar 18 11:35:56 localhost systemd[1]: Unit mongod.service entered failed state.

Wenn ich gebe, journalctl -xnbekomme ich folgendes:

-- Logs begin at Wed 2015-03-18 08:56:56 IST, end at Wed 2015-03-18 11:35:56 IST. --
Mar 18 11:30:01 localhost systemd[1]: Starting Session 20 of user root.
-- Subject: Unit session-20.scope has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit session-20.scope has begun starting up.
Mar 18 11:30:01 localhost systemd[1]: Started Session 20 of user root.
-- Subject: Unit session-20.scope has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit session-20.scope has finished starting up.
-- 
-- The start-up result is done.
Mar 18 11:30:01 localhost CROND[10712]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Mar 18 11:35:56 localhost systemd[1]: Starting SYSV: Mongo is a scalable, document-oriented database....
-- Subject: Unit mongod.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit mongod.service has begun starting up.
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session opened for user mongod by (uid=0)
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session closed for user mongod
Mar 18 11:35:56 localhost mongod[10841]: Starting mongod: [FAILED]
Mar 18 11:35:56 localhost systemd[1]: mongod.service: control process exited, code=exited status=1
Mar 18 11:35:56 localhost systemd[1]: Failed to start SYSV: Mongo is a scalable, document-oriented database..
-- Subject: Unit mongod.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Kann mir jemand helfen, das zu beheben? Vielen Dank!!!

PS : Das von mir erstellte Datenverzeichnis verfügt über alle Berechtigungen für den Benutzer. Aber wieder, wenn ich das Datenverzeichnis auf default ( /var/lib/mongodb) ändere , funktioniert es gut.

Antworten:


6

Ich bin auf ein ähnliches Problem gestoßen und habe festgestellt, dass es sich mongod.confin meinem Fall um eine falsch konfigurierte Datei handelt. Es kann auch sein, dass die Berechtigungen für das neue Verzeichnis nicht richtig festgelegt sind. chown -R mongod:mongod <directory name>So habe ich den Zugang sichergestellt (und natürlich auch den chmod 600 <dir>). Führen Sie ls -Zzum Schluss ein aus, um sicherzustellen, dass der Kontext korrekt ist. Ich habe gerade mit dem Standardverzeichnis verglichen, das für mich funktioniert hat.

Wenn dies noch nicht behoben ist, zeigen Sie bitte auch den Inhalt Ihrer Protokolldatei an. Möglicherweise gibt es dort einige Hinweise.


4

Als Antwort auf das, was @mustaccio sagte, war die Antwort für mich der SELinux-Kontext für das neue logpathund dbpath. Ich habe die folgenden Befehle ausgeführt und alles war gut:

sudo chcon -Rv --type=mongod_log_t $logpath
sudo chcon -Rv --type=mongod_var_lib_t $dbpath

(Dies war übrigens auf RHEL 7.1)


4

Ich hatte dies sowohl auf Raspberry Pi als auch auf meinem Ubuntu-Server.

„Job für mongod.service fehlgeschlagen. Weitere Informationen finden Sie unter 'systemctl status mongod.service' und 'journalctl -xn'. “

Ich hatte dieses Problem bei verschiedenen Gelegenheiten aus verschiedenen Gründen:

  1. Falsch benannte .conf-Datei - Das Mongodb-Skript (in das ich verschoben habe /etc/init.d/mongodb), Zeile 57, CONF=/etc/mongod.confals meine eigentliche Datei war /etc/mongodb.conf. Durch Ändern der Zeile 57 wurde dies korrigiert. Außerdem hätte ich den Skriptnamen trotzdem ändern können.

  2. mongod.lock-Datei - Als mongod das letzte Mal gestoppt wurde, hatte es keine Chance, die Datenbank zu schließen. Dadurch verbleibt eine Datei in Ihrem Datenbankordner mit dem Namen mongod.lock. In dem Ordner befindet sich eine Nummer (ich glaube, es ist die PID, die Mongo zuletzt verwendet hat). Wenn diese Datei vorhanden ist, können Sie den Mongod-Dienst nicht starten. Löschen Sie die Datei und versuchen Sie es erneut.

  3. mongo user - Ich musste einen Linux-Benutzer erstellen, der für das Starten und Ausführen von mongod.service verantwortlich ist. Ich nannte meinen Mongo und aktualisierte mein /etc/init.d/mongodbSkript, Zeile 95 für mich, um zu sagen DAEMONUSER=${DAEMONUSER:-mongo}. Dies funktioniert natürlich nur, wenn Sie einen neuen Benutzer namens mongo erstellt haben (oder was auch immer Sie wollen, denke ich).

  4. DB-Berechtigungen - Dies ist eine beliebte. Sobald Sie angegeben haben, wo sich der Datenbankordner befindet, müssen Sie sicherstellen, dass Ihr 'Mongo'-Benutzer Eigentümer dieser Datei ist. Zum Beispiel wird meine Datenbank unter gespeichert /data/db. Ich habe den folgenden Befehl ausgeführt:
    sudo chown –R mongo:mongo /data
    Dadurch wurde der Besitz von /dataund allen Unterverzeichnissen auf den Mongo-Benutzer übertragen.

  5. Falscher Service - Dieser war ein wenig peinlich für mich. Ich habe versucht, mongoals Dienst statt zu starten mongod. mongoist die Shell, die Sie ausführen und Befehle manuell direkt in Mongo eingeben können. So habe ich meine Datenbank erstellt und zum Beispiel einige Objekte hinzugefügt. mongodAuf der anderen Seite befindet sich der Mongo-Daemon, der im Hintergrund ausgeführt wird und Ihre Datenbank für andere Anwendungen hostet, auf die Sie schreiben / für die Sie zugreifen. Stellen Sie sicher, dass Sie sie nirgendwo in Ihren Conf-Dateien, Skripten usw. verwechseln.

Hoffe, eine davon wird das Problem für Sie beheben.

Nebenbei bemerkt ist meine mongodb.confDatei leer. Auch wenn es leer ist, müssen Sie richtig darauf zeigen.


1

Ich bin auf dieses Problem gestoßen, als ich von Mongo, das mit Centos 7 Repos geliefert wird, auf Mongos eigene Repos umgestiegen bin. Tatsächlich wird ein Upgrade von V2 auf V3 durchgeführt.

Es stellt sich heraus, dass Centos 7 Repo den Benutzer Mongodb benötigt , während Mongos eigenes Repo den Benutzer Mongod will

Am Ende war es die Protokolldatei, die noch von der alten Installation vorhanden war, in die die neue Installation nicht schreiben konnte, da die Benutzernamen unterschiedlich waren und ich es nicht bemerkt hatte.


1

Auf meinem System (Fedora) habe ich "/ var / log" auf einem tmpfs (ram), si jedes Mal, wenn ich alles auf dieser Partition neu starte, geht alles verloren. Viele Leute tun dies, weil sie SSD-Laufwerke haben und die E / A reduzieren möchten (was die Lebensdauer des Laufwerks spart).

Die Lösung besteht darin, das Verzeichnis / var / log / mongodb zu erstellen und mongodb bei jedem Neustart des Systems als Eigentümer festzulegen.

Verwenden Sie ein Skript wie:

#!/bin/sh
sudo mkdir /var/log/mongodb
sudo chown mongodb:mongodb /var/log/mongodb

Wenn Sie nicht sicher sind, welchen Benutzer mongod verwendet, gehen Sie einfach wie folgt vor:

cat /etc/passwd | grep mongo

Fügen Sie das Skript Ihrem Systemstart hinzu.


1

Ich habe es versucht und es hat funktioniert.

sudo chown -R mongodb:mongodb /var/log/mongodb
sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chmod -R 755 /var/lib/mongodb
sudo chmod -R 755 /var/log/mongodb

0

Sie bearbeiten den Pfad nicht. Ich habe das Problem mit dem Befehl gelöst:

mongod --dbpath /data/mongo

0

Dies ist ein Berechtigungsproblem. Wenn wir den Pfad des Datenverzeichnisses oder der Protokolldatei ändern, müssen wir dem neuen Verzeichnis Berechtigungen erteilen. Dann läuft es gut. Wenn ein solches Problem aufgetreten ist, überprüfen Sie zunächst die Protokolldatei "mongod.log".


Dies hat nicht geholfen. Ich habe dem Benutzer, der den Mongod-Dienst ausführt, die volle Berechtigung für den Ordner "Protokoll" erteilt. Ich verwende Windows Server 2016. Der Dienst kann nach dem Ändern des Pfads zur Protokolldatei immer noch nicht neu gestartet werden Fehler: "Der Dienst reagiert nicht auf die Steuerfunktion.", bitte eine Idee?
Eddie Kumar

0

Stoppen Sie MongoDB Server:

service mongod stop

Kopieren Sie das Mongo-Verzeichnis in ein neues Verzeichnis:

rsync -av /var/lib/mongo /home/data/

Altes Verzeichnis umbenennen:

mv /var/lib/mongo /var/lib/mongo.bak

Symlink zum neuen Standort:

ln -s /home/data/mongo /var/lib/mongo

Starten Sie MongoDB Server:

service mongod start
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.