Se movió la base de datos de Mongo a una unidad diferente: no se pudo adquirir el bloqueo para lockfilepath

Estoy en el proceso de mover mis datos mongo a una unidad diferente. Todos los datos que quiero mover están almacenados en /data/db y los estoy moviendo a un NAS (almacenamiento conectado a la red).

Primer paso:

mongodump -d mydb -c mycollection -o nas/mongo-temp

Esto creó un árbol de archivos en mongo-temp/ así:

dump
`-- mydb
    `-- mycollection.bson

1 directory, 1 file

Luego detuve el servicio mongod y creé un nuevo directorio /data/db:

/etc/init.d/mongod stop
mkdir mongo-temp/data/db

... y cambió la línea dbpath en /etc/mongodb.conf

dbpath=.../mongo-temp/data/db

Reinicié con éxito el servidor mongo usando /etc/init.d/mongod start.

Cuando trato de conectar:

mongo
MongoDB shell version: 1.6.4
Thu May  3 09:53:23 *** warning: spider monkey build without utf8 support.  consider rebuilding with utf8 support
connecting to: test
Thu May  3 09:53:24 Error: couldn't connect to server 127.0.0.1 (anon):1154
exception: connect failed

He intentado iniciar mongod con el comando mongod --dbpath .../mongo-temp/data/db pero me sale un error que dice:

Thu May  3 09:57:26 exception in initAndListen std::exception: Unable to acquire lock for lockfilepath: /home/dlpstats/nas-mnt/mongo-temp/data/db/mongod.lock

Eliminar el archivo de bloqueo no ayuda. Si ejecuto el comando mongod sin --dbpath, el servidor comienza bien y puedo realizar consultas en mi base de datos anterior.

preguntado el 03 de mayo de 12 a las 17:05

3 Respuestas

Primero, mencionó que usó mongodump para llenar la nueva unidad: ¿fue solo un método para hacer una copia de seguridad o pretendía que fueran los nuevos archivos de la base de datos? No es así como funciona: la salida de mongodump no es lo mismo que un archivo de base de datos; de hecho, debe volver a importarse con mongoresore. Si realiza una copia directa del archivo de datos, la transferencia será perfecta.

Luego, además de los permisos sugeridos por Wes en su respuesta, algunas cosas más para verificar:

  1. Que ha apagado el servidor anterior con éxito y por completo; es posible que se haya informado incorrectamente de un error y lo esté obteniendo porque está tratando de tomar un puerto que ya está abierto.
  2. Está utilizando la versión 1.6.4 de acuerdo con la salida de mongo shell, supongo que instaló desde el repositorio de Ubuntu para 11.04 o similar, esa no es una buena opción: 1.6 es muy antigua en este momento. Use los repositorios 10gen (http://www.mongodb.org/display/DOCS/Ubuntu+and+Debian+packages) o descargue los binarios y obtenga una versión más reciente

Por último, pero no menos importante, cuando inicie mongod manualmente, asegúrese de que todos los argumentos sean iguales, como el puerto. Cuando se conecte a través del shell de mongo, especifique el puerto en el que inició el mongod; no confíe en los valores predeterminados cuando se encuentre con problemas como este, sea explícito.

contestado el 03 de mayo de 12 a las 20:05

dump es solo un método de copia de seguridad. Soy consciente de la restauración y tengo la intención de usarla una vez que el servidor funcione. Verificaré el 1 y el 2. Gracias. SemperFly

Estoy en CentOS. seguí los pasos de mongodb.org/display/DOCS/CentOS+y+Fedora+Paquetes para instalar mongo. ¿Hay una fuente de repositorio más nueva para centos? - SemperFly

No, esa es la fuente correcta, pero parece que está ejecutando una versión muy antigua: tal vez instaló mongodb (que afectaría a su repositorio predeterminado) y no mongo-10gen, etc., lo que le dará 2.0.4 en la actualidad, no 1.6.4 .XNUMX - Adán Comerford

Estuve trasteando desde que actualicé y nada. Creo que el NAS puede tener algo que ver con eso. Puedo crear un directorio local como fuente de base de datos para MongoDB muy bien. Pero cuando monto el nas y uso ese directorio, aparece el error de no poder adquirir el archivo de bloqueo. - SemperFly

¿Qué sistema de archivos está usando el NAS? Si está formateado para Windows/MAC, me pregunto si esa podría ser la causa de sus problemas.... - Adán Comerford

Me enfrenté a este problema y emitir el siguiente comando resolvió mi problema:

rm /var/lib/mongodb/mongod.lock 

Y luego reinicie el mongod.

Pero No estoy seguro si es una buena solución o no.

Respondido 10 Abr '14, 14:04

Verifique los permisos para el directorio y los directorios principales de mongo-temp. ¿Presumiblemente se está ejecutando como el usuario mongodb?

Necesita permisos de ejecución en el directorio (y directorios principales) para poder crear archivos allí. Los permisos de ejecución en un directorio le permiten enumerar los archivos allí, lo cual es necesario para poder abrir el archivo para escribir.

contestado el 03 de mayo de 12 a las 18:05

He probado varios permisos, incluido el que tienes arriba. Mismo resultado. - SemperFly

Configure un shell en el usuario mongodb en /etc/passwd, y luego cambie a ese usuario e intente ir a esa carpeta y crear un archivo. Si puede crear un archivo, entonces no es un problema de permisos. Sin embargo, tengo un fuerte presentimiento de que lo es. - eva freeman

Todavía no hay dados. Puede crear el archivo de bloqueo pero no puede "adquirir un bloqueo". - SemperFly

¿Puedes abrir el archivo, poner algo en él y guardarlo? (como usuario mongodb) - eva freeman

¿Y mongodb posee el archivo de bloqueo? Si es así, supongo que me quedé sin sugerencias en cuanto a los permisos. - eva freeman

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.