
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.lock
und 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 .n
schwerer 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 .1
etc.-Dateien sind die Datendateien selbst. Wenn Sie eine mongod
Instanz mit einem --dbpath
Argument 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, mongorestore
diese Datendateien können nicht direkt verwendet werden, Sie mongodump
können sie aber lesen und die Daten daraus in die mongorestore
erwarteten 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 --repair
hier 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 mongodump
Seite beschrieben:
http://docs.mongodb.org/manual/reference/mongodump/
Sobald Sie die Dateien ausgelesen haben, können Sie mongorestore
sie in eine andere mongod
Instanz erneut importieren.