MongoDB wird nach dem Serverabsturz nicht gestartet

76

Mein Ubuntu-Computer war abgestürzt, und als ich ihn neu startete, funktionierte MongoDB nicht. Ich habe die folgenden Befehle ausprobiert und die folgende Ausgabe erhalten:

$ mongo
Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91
exception: connect failed

$ service mongodb status
mongodb stop/waiting

$ service mongodb restart
stop: Unknown instance: 
start: Rejected send message, 1 matched rules; type="method_call",
       sender=":1.57" (uid=1000 pid=2227 comm="start mongodb ")
       interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)"
       requested_reply="0"
       destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

$ tail /var/log/mongodb/mongodb.log
[initandlisten] exception in initAndListen: 12596 old lock file, terminating
dbexit: 
[initandlisten] shutdown: going to close listening sockets...
[initandlisten] shutdown: going to flush diaglog...
[initandlisten] shutdown: going to close sockets...
[initandlisten] shutdown: waiting for fs preallocator...
[initandlisten] shutdown: closing all files...
[initandlisten] closeAllFiles() finished
dbexit: really exiting now

(Ausgabe neu formatiert, um dem Website-Layout zu entsprechen.)

Was ist passiert? Wie kann ich es reparieren?

Hosam Aly
quelle

Antworten:

175

Die Protokolldatei teilt Ihnen mit, dass Sie eine "alte Sperrdatei" haben . MongoDB behält eine Sperrdatei bei , während sie ausgeführt wird. Diese Datei wird beim Start erstellt und beim Stoppen gelöscht. Wenn der Computer abstürzt (oder MongoDB abstürzt, z. B. über kill), wird diese Datei nicht gelöscht und die Datenbank wird daher nicht gestartet. Das Vorhandensein dieser Datei weist auf ein unsauberes Herunterfahren von MongoDB hin.

Zwei Dinge können getan werden:

  1. Wenn dies ein Entwicklungscomputer ist und Sie Ihre Datenbank nicht verwendet haben (und Ihre Programme auch nicht), können Sie die Datei manuell entfernen. Für MongoDB 2.2.2 unter Ubuntu 12.10 ist es in /var/lib/mongodb/mongod.lock. Bei anderen Versionen kann sich die Datei in einem anderen Pfad befinden oder sie kann benannt werden mongo.lock.

  2. Der sicherere Weg ist, dem MongoDB- Leitfaden für Haltbarkeit und Reparatur zu folgen . Zusammenfassend sollten Sie für einen Computer mit der obigen Konfiguration die folgenden Befehle ausführen:

    sudo -u mongodb mongod --repair --dbpath /var/lib/mongodb/
    sudo service mongod start
    
Hosam Aly
quelle
2
Für Windows siehe stackoverflow.com/questions/11877930/…
TrueWill
1
Lieber @HosamAly, wie kann ich das beheben, da der Server normalerweise abstürzt. Also muss ich manuell machen, nachdem der Server abgestürzt ist? Das ist so schlimm, weil andere Datenbanken (MySQL, Postgresql, ..) immer erfolgreich starten, nachdem der Server abgestürzt ist
John Nguyen
1
@ JohnNguyen Sie könnten es automatisieren, aber ich würde davon abraten, da Sie keine Chance bekommen, den Schaden zu untersuchen, der durch den "Reparatur" -Prozess verursacht werden kann.
Hosam Aly
Nimmt die erste Zeile nicht an: sudo mongod -u mongodb --repair --dbpath / var / lib / mongodb /? - Joshy vor 7 Minuten
Joshy
@ Joshy Ich weiß nicht, ob deine Version funktionieren würde. Meins läuft mongodmit den Benutzerberechtigungen "mongodb". Ihre führt es mit Root-Berechtigungen.
Hosam Aly
3

alles was ich tun musste war rennen: sudo mongod --reparatur

dann:

Sudo Mongod

Edencorbin
quelle
2
sudo mongodbedeutet, dass Ihre Datenbank als Root ausgeführt wird, was aus Sicherheitsgründen nicht empfohlen wird.
Hosam Aly
2

Aufgrund meiner Erfahrung lösche ich normalerweise die Datei "mongod.lock", die sich im Datenbankordner befindet. In meinem Fall:

* Ich navigiere zu dem Ort, an dem die Datenbank in meinem Ubuntu-Ordner "data" installiert ist. (CD-Daten); Liste der Dateien (ls) * Dann entferne ich die Datei "mongod.lock", die beim Absturz der Datenbank automatisch erstellt wurde, indem ich die Datei "rm mongod.lock" herausgebe.

Danach werde ich entweder "./mongod" ausgeben, um den Mongo Deamon zu starten, oder Mongo, um die Mongo Shell zu starten. Und alles wird gut.

samson ojo
quelle
1

Wenn Sie keine Überwachungstools wie Bluepill oder Monit usw. verwendet haben, müssen Sie sich diesem Problem stellen, da Mongo nach einem Serverabsturz aus irgendeinem Grund seinen Daemon nicht automatisch gestartet hat. Dann müssen Sie ihn manuell arbeiten lassen, wie sudo service mongod restart ich es mir vorgestellt habe, aber es muss Wenn Sie weitere Aufgaben erledigen möchten, stellen Sie bitte sicher, dass Sie sich in Ihrem Datenbankpfad befinden, /etc/mongod.confbevor Sie Ihren Mongo-Daemon starten.

Für mich war es

storage:
  dbPath: /var/lib/mongodb

Wenn ich den mongodBefehl MongoDB starting : pid=10795 port=27017 dbpath=/data/db 64-bit host=xyz.comeingebe, wird mir angezeigt, dass Ihr Datenbankpfad mit dem in /etc/mongod.conf angegebenen übereinstimmt

Dazu können Sie den Befehl mo eingeben sudo mongod --dbpath /var/lib/mongodbund dann mit dem mongodBefehl an Ihrem gewünschten Datenbankpfad starten.

Zu Ihrer Information : Starten Sie Ihren Mongo-Prozess mit einem mongodBefehl

Touseef Murtaza
quelle
0

Überprüfen Sie, ob auf Ihrem Server genügend freier Speicherplatz vorhanden ist. Wenn kein Platz mehr vorhanden ist, startet Mongodb nicht.

Jeremy Lynch
quelle
1
Dies ist gut zu überprüfen, auch wenn es in diesem Fall falsch ist.
Asmacdo
0

Dies ist wahrscheinlich nicht die beste Lösung, aber wenn Sie verzweifelt sind, können Sie dies versuchen. Es schien, dass nur das Tagebuch ein Problem für mich war, also habe ich folgende Schritte unternommen:

  1. Erstellen Sie ein neues Datenverzeichnis . Möglicherweise / var / lib / mongodb2
  2. Aktualisieren Sie Ihre mongod.conf , um auf das neue Datenverzeichnis zu verweisen.
  3. Starten Sie mongoDB.
  4. Wenn es erfolgreich gestartet wurde , können Sie mongo wieder herunterfahren und fortfahren, andernfalls können Sie hier aufhören zu lesen.
  5. Suchen Sie Ihr vorheriges Datenverzeichnis und kopieren Sie die Dateien für Ihre Datenbank (en) in Ihr neues Datenverzeichnis (Beispiel: admin.0 admin.1 admin.ns usw.)
  6. Starten Sie mongoDB erneut (verwenden Sie weiterhin das neue Datenverzeichnis)

Nachdem ich diese Schritte ausgeführt hatte (dauerte weniger als 5 Minuten), war ich betriebsbereit und alle Daten schienen in Ordnung zu sein.

Jage
quelle
0

Danke Leute. Wir hatten auch ein Problem, bei dem MongoDB immer wieder neu gestartet wurde und sich über alte Sperrdateien beschwerte . Ich habe MongoDB von der Windows-Dienstliste gestoppt und dann die mongod.lockDatei gelöscht . Danach konnte ich den MongoDB-Dienst korrekt starten und es funktionierte einwandfrei.

Keijo
quelle
0

Das Entfernen der .lockDatei aus dem Mongo-Datenverzeichnis dbpathfunktioniert bei mir.

z.B sudo sudo rm {data-directory}/mongod.lock

Hemant Thorat
quelle