
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.lock
y 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 .n
archivos 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 .1
archivos etc. son los propios archivos de datos. Si inició una mongod
instancia con un --dbpath
argumento 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 mongorestore
no puede usar estos archivos de datos directamente, pero mongodump
puede leerlos y volcar datos de ellos en los archivos BSON que mongorestore
espera.
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 --repair
aquí 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 mongodump
página:
http://docs.mongodb.org/manual/reference/mongodump/
Una vez que elimine los archivos, puede usarlos mongorestore
para volver a importarlos a otra mongod
instancia.