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

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

Ich habe eine MongoDB 2.0.4-Installation auf Ubuntu 12.10. Vor kurzem hatte ich einige Probleme, von außen eine Verbindung zur Datenbank herzustellen, und fand heraus, dass etwas den korrekten Start von MongoDB verhinderte. Wie in mehreren Quellen vorgeschlagen (siehe StackOverflow), habe ich entfernt /var/lib/mongodb/mongodb.lockund ausgeführt mongod --repair. Das Problem wurde dadurch nicht gelöst, MongoDB ließ sich nicht ausführen und erstellte weiterhin Sperrdateien, die anschließend nicht entfernt wurden. Beim Anschauen der Protokolle wurde mir klar, dass es keinen Zugriff auf einen Ordner namens hatte $tmpSomething, also habe ich ihn entfernt (da der Name auf einen temporären Ordner hindeutete), und anschließend funktionierte alles ... außer der Tatsache, dass ich nur eine meiner vorherigen Datenbanken sichtbar habe, während die anderen noch da sind, da mein /var/lib/mongodb/Ordner noch voller .ns .0 .1 .nschwerer Dateien ist. Gibt es eine Möglichkeit, sie in der Datenbank wiederherzustellen? (Ich habe es mit mongorestore versucht, aber wie erwartet verarbeitet es diese Dateien nicht.)

Danke

Antwort1

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

Da Ihre Probleme auf eine Beschädigung und/oder ein anderes Startproblem hindeuten mongod(Sie sollten wirklich die Protokolldateien der Startmeldungen veröffentlichen, möglicherweise in einer separaten Frage, um dieses Problem zu beheben), gibt es Alternativen. Zur Referenz: Die häufigsten Probleme hängen mit Berechtigungen zusammen, insbesondere wenn Benutzer versuchen, Mongod manuell (als sie selbst) oder mit Sudo (als Root) zu starten und problematische Berechtigungen in den verschiedenen Verzeichnissen erstellen.

Sie haben Recht, mongorestorediese Datendateien können nicht direkt verwendet werden, Sie mongodumpkönnen sie aber lesen und die Daten daraus in die mongorestoreerwarteten BSON-Dateien übertragen.

Die gewünschte Option ist hierDatenbankpfad. Sie erwähnen, dass Ihr Pfad 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 --repairhier auch verwenden, um Beschädigungen zu beheben, zusammen mit den Abfrageoptionen in extremen Fällen, 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 ausgelesen haben, können Sie mongorestoresie in eine andere mongodInstanz erneut importieren.

verwandte Informationen