it-swarm.com.de

MongoDB startet nach einem Serverabsturz nicht mehr

Mein Ubuntu-Computer war abgestürzt, und als ich ihn neu startete, funktionierte MongoDB nicht. Ich habe die folgenden Befehle ausprobiert und 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

(Die Ausgabe wurde entsprechend dem Website-Layout neu formatiert.)

Was ist passiert? Wie kann ich es reparieren?

72
Hosam Aly

Die Protokolldatei sagt Ihnen, dass Sie eine "alte Sperrdatei" haben. MongoDB behält eine lock -Datei, während es läuft. Diese Datei wird beim Start erstellt und beim Stoppen gelöscht. Wenn der Computer abstürzt (oder MongoDB stürzt ab, z. B. über kill), wird diese Datei nicht gelöscht und die Datenbank wird daher nicht gestartet. Das Vorhandensein dieser Datei weist auf ein unreines Herunterfahren von MongoDB hin.

Zwei Dinge können gemacht werden:

  1. Wenn dies eine Entwicklungsmaschine ist und Sie Ihre Datenbank nicht verwendet haben (und keine Ihrer Programme), 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 mongo.lock heißen.

  2. Der sicherere Weg ist, MongoDB Durability and Repair Guide 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
    
169
Hosam Aly

alles, was ich tun musste, war zu laufen:

dann:

Sudo Mongod

3
edencorbin

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

* Ich gehe zu dem Ort, an dem die Datenbank auf meinem Ubuntu installiert ist, d. H. Dem Ordner "data". (Cd data); liste die Dateien (ls) * Anschließend entferne ich die "mongod.lock" -Datei, die automatisch erstellt wurde, als die Datenbank abstürzte, indem ich die "rm mongod.lock" -Datei ausstelle.

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

2
samson ojo

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

0
Jeremy Lynch

Danke Leute. Wir hatten auch ein Problem, bei dem MongoDB immer wieder neu gestartet wurde und sich über alte Sperrdatei beschwerte. Ich habe MongoDB von der Windows-Serviceliste gestoppt und die mongod.lock-Datei gelöscht. Danach konnte ich den MongoDB-Dienst korrekt starten und es hat gut funktioniert.

0
Keijo

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

  1. Ein neues Datenverzeichnis erstellen . Möglicherweise/var/lib/mongodb2
  2. Aktualisieren Sie Ihre mongod.conf , um auf das neue Datenverzeichnis zu zeigen.
  3. Start MongoDB. 
  4. Wenn es erfolgreich startet, können Sie den Mongo wieder herunterfahren und fortfahren, andernfalls können Sie hier nicht weiterlesen. 
  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. mongoDB erneut starten (verwendet immer noch das neue Datenverzeichnis)

Nachdem diese Schritte abgeschlossen waren (weniger als 5 Minuten), war ich in Betrieb und alle Daten schienen in Ordnung zu sein.

0
Jage

.lock-Datei aus dem Mongo-Datenverzeichnis entfernen dbpath funktioniert für mich.

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

0
Hemant Thorat

Wenn Sie keine Überwachungstools wie Bluepill oder Monit etc verwendet haben, müssen Sie sich mit diesem Problem auseinandersetzen, da mongo nach einem Serverabsturz aus irgendeinem Grund seinen Daemon nicht automatisch gestartet hat. Dann müssen Sie es manuell funktionieren lassen. Wie Sudo service mongod restart Ich habe dieses Problem gefunden, aber es müssen noch einige weitere Aufgaben erledigt werden. Bitte stellen Sie sicher, dass Ihr DBPfad unter /etc/mongod.conf steht, bevor Sie Ihren Mongo-Daemon starten.

Für mich war es so 

storage:
  dbPath: /var/lib/mongodb

Wenn ich den Befehl mongod eingebe, wird mir MongoDB starting : pid=10795 port=27017 dbpath=/data/db 64-bit Host=xyz.com angezeigt, dass Ihr Datenbankpfad dem in /etc/mongod.conf angegebenen entspricht

Dazu können Sie Sudo mongod --dbpath /var/lib/mongodb eingeben und dann den Befehl mongod verwenden, um den Mongo-Prozess an Ihrem gewünschten Datenbankpfad zu starten.

FYI: Starten Sie Ihren Mongo-Prozess mit dem Befehl mongod

0
Touseef Murtaza