Ist es möglich, MongoDB-Datenbanken von .ns und .0, .1,. … Dateien?

14

Ich habe eine MongoDB 2.0.4-Installation unter Ubuntu 12.10. Vor kurzem hatte ich einige Probleme mit der Verbindung zur Datenbank von außen und stellte fest, dass MongoDB nicht richtig gestartet werden konnte. Wie in mehreren Quellen vorgeschlagen (siehe StackOverflow), entfernte ich /var/lib/mongodb/mongodb.lockund lief mongod --repair. Dies löste das Problem nicht, MongoDB lief nicht und erstellte weiterhin Sperrdateien, die anschließend nicht mehr entfernt wurden. Als ich mir die Protokolle ansah, stellte ich fest, dass es keinen Zugriff auf einen Ordner mit dem Namen $tmpSomethinghatte. Da der Name einen temporären Ordner vorschlug, entfernte ich ihn und danach funktionierte alles ... mit der Ausnahme, dass ich nur einen hatte von meinen vorherigen datenbanken in sicht, während die anderen noch da sind, weil mein /var/lib/mongodb/ordner noch voll ist von.ns .0 .1 .nDateien, die viel Gewicht haben. Gibt es eine Möglichkeit, sie in der Datenbank wiederherzustellen? (Ich habe es mit mongorestore versucht, aber wie ich erwartet hatte, werden diese Dateien nicht verarbeitet).

Vielen Dank

Tunnuz
quelle

Antworten:

19

Die .ns .0 .1Dateien etc. sind die Datendateien selbst. Wenn Sie eine mongodInstanz mit einem --dbpathArgument gestartet haben, das auf diesen Ordner zeigt, oder wenn Sie den Inhalt an eine andere Stelle verschoben und die Option zum Zeigen verwendet haben, versucht mongod, ihn wie gewohnt zu lesen.

Da Ihre Probleme auf eine Beschädigung und / oder ein anderes Problem hinweisen mongod(Sie sollten die Protokolldateien für Startmeldungen wirklich veröffentlichen, möglicherweise in einer separaten Frage, um dieses Problem zu beheben), gibt es Alternativen. Zu Referenzzwecken sind die häufigsten Probleme mit Berechtigungen verbunden, insbesondere wenn Benutzer versuchen, mongod manuell (als sie selbst) oder mit sudo (als root) zu starten und problematische Berechtigungen in den verschiedenen Verzeichnissen zu erstellen.

Sie haben Recht, dass Sie mongorestorediese Datendateien nicht direkt verwenden können, sondern mongodumpsie lesen und Daten von ihnen in die mongorestoreerwarteten BSON-Dateien sichern können .

Die Option, die Sie hier wünschen, ist dbpath . Sie erwähnen, dass Ihr Pfad so ist /var/lib/mongo, also können Sie so etwas ausführen:

mongodump --dbpath /var/lib/mongo -d <database name> -o /path/to/put/files

Optional können Sie auch --repairhier die Fehlerbehebung zusammen mit den Abfrageoptionen unter extremen Umständen durchführen, um beschädigte Abschnitte zu umgehen (selten, wenn überhaupt, erforderlich). Die verschiedenen Optionen werden auf der mongodumpSeite beschrieben:

http://docs.mongodb.org/manual/reference/mongodump/

Sobald Sie die Dateien ausgegeben haben, können Sie mongorestoresie erneut in eine andere mongodInstanz importieren .

Adam C
quelle
5
Mongodump 3.0+ hat das --dbpath-Flag nicht mehr .
doub1ejack
2
Mit Mongo 3.0 besteht die Möglichkeit, den Mongo-Server mit den angegebenen Dateien zu starten: mongod --dbpath ./und dann mit dem Mongodump ohne den--dbpath
Shwaydogg
3
Nur ein Hinweis: Wenn Sie Mongo 3.0 ausführen und mongod --dbpath ./Ihnen die Datenbank nicht in den .ns .0Dateien zur Verfügung stellen, wird möglicherweise standardmäßig die neue WiredTiger-Engine anstelle der alten MMapV1-Engine als Speicher-Engine verwendet. Versuchen Sie mongod --storageEngine mmapv1 --dbpath ./stattdessen, eine Verbindung mit der alten Engine herzustellen.
Flamebaud
1
Kann mir jemand helfen, die Daten von .ns, .0 und .1 Dateien auf Mongo 3.0 zu migrieren
Mandeep Singh
1
Wie @flamebaud sagte, hat sich die Standard-Engine geändert. Bitte überprüfen Sie Default Storage Engine Change in der Mongo-Dokumentation. Vielleicht möchten Sie auch einen Blick auf den Anfang des Dokuments bei WiredTiger Storage Engine
Ludovic Kuty