¿Es posible recuperar bases de datos MongoDB desde .ns y .0, .1, . ... archivos?

¿Es posible recuperar bases de datos MongoDB desde .ns y .0, .1, . ... archivos?

Tengo una instalación de MongoDB 2.0.4 en Ubuntu 12.10. Recientemente tuve algunos problemas para conectarme a la base de datos desde el exterior y descubrí que había algo que impedía que MongoDB se iniciara correctamente. Como se sugiere en varias fuentes (ver StackOverflow), eliminé /var/lib/mongodb/mongodb.locky ejecuté mongod --repair. Esto no resolvió el problema, MongoDB no se ejecutaba y seguía creando archivos de bloqueo que no se ocupaba de eliminar después. Al mirar los registros, me di cuenta de que no tenía acceso a una carpeta llamada $tmpSomething, así que (como el nombre sugería una carpeta temporal) la eliminé y luego todo funcionó... excepto el hecho de que solo tengo uno. de mis bases de datos anteriores a la vista, mientras que las otras siguen ahí porque mi /var/lib/mongodb/carpeta todavía está llena de .ns .0 .1 .narchivos que pesan mucho. ¿Hay alguna manera de restaurarlos en la base de datos? (Lo intenté con mongorestore, pero como esperaba, no maneja esos archivos).

Gracias

Respuesta1

Los .ns .0 .1archivos etc. son los propios archivos de datos. Si inició una mongodinstancia con un --dbpathargumento que apunta a esa carpeta, o si movió el contenido a otro lugar y usó la opción para apuntar allí, mongod intentará leerlo normalmente.

Dado que sus problemas sugieren corrupción y/o algún otro problema de inicio mongod(realmente debería publicar los archivos de registro de mensajes de inicio, tal vez en una pregunta separada para abordar ese problema), existen alternativas. Como referencia, los problemas más comunes están relacionados con los permisos, especialmente cuando las personas intentan iniciar mongod manualmente (como ellos mismos) o con sudo (como root) y crean permisos problemáticos en los distintos directorios.

Tiene razón en que mongorestoreno puede usar estos archivos de datos directamente, pero mongodumppuede leerlos y volcar datos de ellos en los archivos BSON que mongorestoreespera.

La opción que quieres aquí esruta de base de datos. Mencionas que tu ruta es /var/lib/mongo, por lo que puedes ejecutar algo como esto:

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

Opcionalmente, también puede utilizar --repairaquí para corregir la corrupción junto con las opciones de consulta en circunstancias extremas para evitar secciones corruptas (rara vez, si es que alguna vez, es necesario). Las distintas opciones se describen en la mongodumppágina:

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

Una vez que elimine los archivos, puede usarlos mongorestorepara volver a importarlos a otra mongodinstancia.

información relacionada