MongoDB: excepción en initAndListen: 20 Se intentó crear un archivo de bloqueo en un directorio de solo lectura: / data / db, finalizando

146

Creé /data/dben el directorio raíz y ejecuté ./mongod:

[initandlisten] exception in initAndListen: 20 Attempted to create a lock file on a read-only directory: /data/db, terminating
[initandlisten] shutdown: going to close listening sockets...
[initandlisten] shutdown: going to flush diaglog...
[initandlisten] now exiting
[initandlisten] shutting down with code:100
whinytween96
fuente
44
Parece un problema de permisos. ¿El usuario que ejecuta mongod tiene permiso para escribir en el directorio / data / db? Comparta la salida de ls -ld /data/dby idasí podemos asesorar.
Bjorn Roche
drwxr-xr-x 2 raíz 4096
whinytween96
uid = 1000 (usuario) gid = 1000 (usuario) grupos = 1000 (usuario), 4 (adm), 24 (cdrom), 27 (sudo), 30 (dip), 46 (plugdev), 113 (lpadmin), 128 (sambashare)
whinytween96
@BjornRoche gracias por la -ldparte :)
Skynet
@BjornRoche mi salida es drwxrwxrwx. 4 mongod mongod 4096 Sep 17 18:18 /data/dby todavía recibo el error. ¿Algunas ideas?
Blake

Respuestas:

278

El problema es que el directorio que creó, /data/db es propiedad y solo el usuario root puede escribirlo, pero está ejecutando mongod como usted mismo. Hay varias formas de resolver esto, pero en última instancia, debe otorgar al directorio en cuestión los permisos correctos. Si esto es para producción, le aconsejaría que revise los documentos y lo piense detenidamente; probablemente desee tener especial cuidado.

Sin embargo, si esto es solo para pruebas y solo necesita que esto funcione y continúe, puede intentar esto, lo que hará que todos puedan escribir en el directorio:

> sudo chmod -R go+w /data/db

o esto, lo que hará que el directorio sea tuyo:

> sudo chown -R $USER /data/db
Bjorn Roche
fuente
44
Creo que alguien puede necesitar -Rcambiar todos los /data/dbarchivos dentro de forma recursiva.
YongHao Hu
2
Gracias por esto. Lo probé y sigo recibiendo el mismo error
Samuel Dare
1
Este tema ya es un poco viejo, pero para mí, el uso chmodgeneró un nuevo error initAndListen : operation not permitted, pero chownfuncionó.
bachinblack
chown lo hizo por mí también
dwagnerkc
Es una mala práctica dar 777 umask a un directorio. Puede configurar 755 y funcionachmod -R 755 /data/db
Juan-Kabbali
60

En una Mac, tuve que hacer lo siguiente:

sudo chown -R $USER /data/db
sudo chown -R $USER /tmp/

porque también había un archivo dentro del /tmpcual Mongo también necesitaba acceso

Santiago Martí Olbrich
fuente
2
Funciona en Fedora 28 Linux
Samuel Ivan
2
Esto debería estar en la cima
Yashwanth Kambala
Esto también lo hizo por mí.
Canovice
25

Si su sistema usa SELinux, asegúrese de usar el contexto correcto para el directorio que creó:

ls -dZ /data/db/
ls -dZ /var/lib/mongo/

y clonar el contexto con:

chcon -R --reference=/var/lib/mongo /data/db
drrossum
fuente
1
¡Salvaste mi día! Muchas gracias
Keerthivasan
2
ls -dZ / var / lib / mongodb / para versiones posteriores de mongo
espeed
17

Experimenté el mismo problema y la siguiente solución resolvió este problema. Deberías probar la siguiente solución.

sudo mkdir -p / data / db
sudo chown -R 'nombre de usuario' / data / db

Hamdi Bayhan
fuente
9

ingrese la descripción de la imagen aquíEn primer lugar, detenga todos los servicios de mongoDB , luego cree un directorio /, significa root, si no lo tiene, y elimine también el archivo de puerto. conceda todos los permisos a ese directorio, conviértase en el propietario de ese directorio, ejecute el siguiente comando:

sudo service mongod stop
sudo rm -rf /tmp/mongod*
sudo mkdir -p /data/db
sudo chmod -R a+wxr /data
sudo chown -R $USER:$USER /data

Ahora que ha terminado, simplemente inicie el servicio MongoDB, si no ayudó, intente cambiar el puerto como:

sudo service mongod restart && mongod # if didn't help run below cmd
mongod --port 27018

Nota: ¡ Para mí, todo esto funciona y espero que funcione para ti, chico!

Código
fuente
5

Arregle los permisos de /data/db(o /var/lib/mongodb):

sudo chown -R mongodb: /data/db

luego reinicie MongoDB, por ejemplo, usando

sudo systemctl restart mongod

En caso de que eso no ayude, revise su mensaje de error si está utilizando un directorio de datos diferente a / var / lib / mongodb. En ese caso corre

sudo chown -R mongodb: <insert your data directory here>

fuente

plcosta
fuente
4

Buenas soluciones, pero me pregunto por qué nadie está dando la solución para Windows.

Si está utilizando Windows solo tiene que "Ejecutar como administrador" el cmd.

Enrique Benito Casado
fuente
66
Creo que es porque la gente generalmente no ejecuta servidores de bases de datos en Windows.
Blake
1
Además, es una mala idea ejecutar una base de datos como administrador / root, revise otros comentarios aquí como este para obtener más detalles
Nino Filiu
4

Si está revisando sus registros de mongodb y está obteniendo dicho error, simplemente siga los pasos como lo hice. Ocurre debido a problemas de permisos con su /data/dbdirectorio. Estoy usando ubuntu16.04 y encuentro la solución con la ejecución de dos comandos simples de la siguiente manera.

Paso 1: otorgue permiso al directorio / data / db:

sudo chmod -R 0777 /data/db

Paso 2: Intenta iniciar el servicio mongod como:

sudo service mongod start

Paso 3: Verifique el estado del servicio mongod:

sudo service mongod status
Jitendra
fuente
2
El paso 1 otorgará permisos de lectura / escritura / ejecución a todos los usuarios. Esto no debería ser usado.
Jonas Franz
Gracias, @JonasFranz, por sus comentarios, por lo que en ese caso, podemos usar el permiso 0755 para el servidor de producción. Por favor, corríjame si estoy equivocado.
Jitendra
3

Si no necesita tener los directorios de la base de datos en la raíz, puede crear data/dben su directorio de inicio ( mkdir -p ~/data/db).

Luego puede iniciar el servidor MongoDB con la --dbpathopción:

mongod --dbpath=$(echo ~)/data/db

(Esto supone que lo está iniciando desde una terminal. Por alguna extraña razón, mongodno acepta ~ como la ruta del directorio de inicio, de ahí el truco de sustitución de eco bash, también puede escribir /home/yourusername/data/db)

De hecho, no tiene que ser así ~/data/db, puede estar en cualquier lugar que desee y de esta manera puede tener múltiples rutas de bases de datos y organizar todo muy bien. Puede que no sea la mejor opción para la producción (dependiendo de lo que quiera hacer), pero para el desarrollo funciona bien.

Kresimir
fuente
3

Me ocupé del mismo problema:

Cambie al directorio MongoDB que contiene el bindirectorio y ejecute:

sudo bin/mongod 

Al ejecutar MongoDB como usuario root, es posible que se le solicite que ingrese la contraseña de root. Si aún no puede ejecutar MongoDB, verifique los permisos para el directorio de datos de MongoDB. Entrar:

ls -ld /data

o escriba ls -l /los permisos para todos los directorios y archivos en el directorio, incluido el /datadirectorio.

El modo de permiso para el usuario raíz debe ser " rwx", lo que significa que el usuario raíz puede leer, escribir y ejecutar los archivos. Para que esto suceda, utilizamos:

chmod 755 /data 

755es una notación octal para establecer los permisos del /datadirectorio en " rwxr-xr-x", lo que significa que el usuario raíz puede leer, escribir y ejecutar, mientras que el "grupo" y "todos" solo pueden leer y ejecutar.

Nota: cuando no pueda hacer esto, escriba:

sudo chmod 755 /data   

para establecer el permiso como usuario root.

Luego, cuando haya terminado con ese paso, vuelva a capturar los modos de permiso usando:

ls -ld /data

que debería verse así:

drwxr-xr-x  3 root  wheel  102 Mar  3 17:00 /data

No necesita preocuparse por el " d" al principio, y observe que los permisos reflejan " rwxr-xr-x".

Ahora puede volver a cambiar al directorio MongoDB y escribir:

sudo bin/mongod  

para ejecutar MongoDB.

yifan li
fuente
2
Mala idea, NUNCA lo ejecutes como sudo. Hay mejores soluciones que gestionan el usuario / grupo para mongod o mongodb dependiendo de su distribución. No use esta solución.
Andy
2

solo necesita ejecutar el comando como superusuario:

solo escribe desde la terminal: sudo su mongod

David Noleto
fuente
1
Siempre es una mala idea ejecutar programas como este como superusuario. Es mejor arreglar los permisos de las carpetas
Jason
2

Si está en Windows y está intentando configurar MongoDB, ejecute cmd como Admnistrator es el camino a seguir, como Enrique sugirió anteriormente, véalo aquí

Adewale Olaoye
fuente
-1

Esto funcionó para mí en Ubuntu LTS 20.04:

$ sudo service mongod start
Sagar Kumar
fuente
1
¡Por favor, explique por qué cree que también funcionará para otros!
sauhardnc
1
Describa la resolución con más detalle con más información como explicar la razón real, agregar un fragmento de código de trabajo y los pasos a seguir para erradicar los problemas. Para obtener más detalles, visite las pautas de StackOverflow.
Kapil Raghuwanshi