Mongod se queja de que no hay una carpeta / data / db

475

Hoy estoy usando mi nueva Mac por primera vez. Estoy siguiendo la guía de inicio en mongodb.org hasta el paso donde se crea el directorio / data / db. por cierto, utilicé la ruta homebrew.

Así que abro una terminal y creo que estoy en lo que llamaron el Directorio de inicio, porque cuando hago "ls", veo carpetas de la aplicación de escritorio Películas Música Imágenes Documentos y Biblioteca.

Entonces hice un

mkdir -p /data/db

primero, dice permiso denegado. Seguí probando cosas diferentes durante media hora y finalmente:

mkdir -p data/db

trabajó. y cuando "ls", existe un directorio de datos y anida en él una carpeta db.

entonces enciendo mongod y se queja de no encontrar datos / db

¿Hice algo malo?

Ahora he hecho el

sudo mkdir -p /data/db

y cuando hago un "ls" veo el directorio de datos y el directorio db. dentro del directorio db, sin embargo, no hay absolutamente nada en él y cuando ahora ejecuto mongod

Sun Oct 30 19:35:19 [initandlisten] exception in initAndListen: 10309 Unable to create/open lock file: /data/db/mongod.lock errno:13 Permission denied Is a mongod instance already running?, terminating
Sun Oct 30 19:35:19 dbexit: 
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to close listening sockets...
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to flush diaglog...
Sun Oct 30 19:35:19 [initandlisten] shutdown: going to close sockets...
Sun Oct 30 19:35:19 [initandlisten] shutdown: waiting for fs preallocator...
Sun Oct 30 19:35:19 [initandlisten] shutdown: lock for final commit...
Sun Oct 30 19:35:19 [initandlisten] shutdown: final commit...
Sun Oct 30 19:35:19 [initandlisten] shutdown: closing all files...
Sun Oct 30 19:35:19 [initandlisten] closeAllFiles() finished
Sun Oct 30 19:35:19 [initandlisten] shutdown: removing fs lock...
Sun Oct 30 19:35:19 [initandlisten] couldn't remove fs lock errno:9 Bad file descriptor
Sun Oct 30 19:35:19 dbexit: really exiting now

EDITAR Obtener mensaje de error para

sudo chown mongod:mongod /data/db

chown: mongod: Invalid argument

¡Gracias a todos!

Nik So
fuente
1
el "argumento inválido" significa que el nombre simbólico para el usuario de mongo es diferente en su sistema; probablemente esté utilizando un paquete o mecanismo de instalación diferente para instalar MongoDB. Debería verificar en sus archivos / etc / passwd y / etc / group el nombre simbólico (o uid / gid) del usuario mongo grep mongo /etc/passwd /etc/group. Si eso no funciona, verifique el nombre comprobando el propietario del directorio ls -ld /var/lib/mongo. O para ver el UID / GID hacer esto: ls -lnd /var/lib/mongo. En mi caso drwxr-xr-x. 6 *487 480* 4096 Sep 20 2011 ..., esto significa usar 487: 480 como parámetro
Tilo
usar el UID / GID es sinónimo de usar el nombre simbólico. por ejemplo, simplemente reemplace 'mongod: mongod con los números uid / gid que encontró con el método anterior ...
Tilo
Ahora que sabemos cómo agregar correctamente este directorio (data / db), ¿por qué no se incluyó este directorio en la instalación en primer lugar?
winux
Si acaba de actualizar a MacOS 10.15, esta respuesta podría ayudar: stackoverflow.com/questions/58283257/…
Adam Zerner
si tiene la última versión de MAC: con la nueva actualización de macOS Catalina, la carpeta "/ data / db" se convierte en solo lectura, no puede modificarla. Siga este procedimiento para crear una base de datos en otra carpeta: 1) Cambie el directorio mongod: sudo mongod --dbpath / System / Volumes / Data / data / db 2) Dele un alias: alias mongod = "sudo mongod --dbpath / System / Volumes / Data / data / db "
Farbod Aprin

Respuestas:

636

Creaste el directorio en el lugar equivocado

/ data / db significa que está directamente debajo del directorio raíz '/', mientras que usted creó 'data / db' (sin el / / principal) probablemente solo dentro de otro directorio, como el directorio '/ root'.

Necesita crear este directorio como root

Necesitas usar sudo, por ejemplosudo mkdir -p /data/db

O debe hacerlo su -para convertirse en superusuario y luego crear el directorio conmkdir -p /data/db


Nota:

MongoDB también tiene una opción donde puede crear el directorio de datos en otra ubicación, pero generalmente no es una buena idea, ya que solo complica un poco las cosas, como la recuperación de la base de datos, porque siempre debe especificar la ruta db manualmente. No recomendaría hacer eso.


Editar:

el mensaje de error que está recibiendo es "No se puede crear / abrir el archivo de bloqueo: /data/db/mongod.lock errno: 13 Permiso denegado" . El directorio que creó no parece tener los permisos y la propiedad correctos: el usuario que ejecuta el proceso MongoDB debe poder escribirlo.

Para ver los permisos y la propiedad del directorio '/ data / db /', haga lo siguiente: (así deberían ser los permisos y la propiedad)

$ ls -ld /data/db/
drwxr-xr-x 4 mongod mongod 4096 Oct 26 10:31 /data/db/

El lado izquierdo 'drwxr-xr-x' muestra los permisos para el Usuario, Grupo y Otros. 'mongod mongod' muestra quién posee el directorio y a qué grupo pertenece ese directorio. Ambos se llaman 'mongod' en este caso.

Si su directorio '/ data / db' no tiene los permisos y la propiedad anteriores, haga lo siguiente :

Primero verifique qué usuario y grupo tiene su usuario mongo:

# grep mongo /etc/passwd
mongod:x:498:496:mongod:/var/lib/mongo:/bin/false

Debería tener una entrada para mongod en / etc / passwd, ya que es un demonio.

sudo chmod 0755 /data/db
sudo chown -R 498:496 /data/db    # using the user-id , group-id

También puede usar el nombre de usuario y el nombre del grupo, de la siguiente manera: (se pueden encontrar en / etc / passwd y / etc / group)

sudo chown -R mongod:mongod /data/db 

eso debería hacerlo funcionar ...

En los comentarios a continuación, algunas personas usaron esto:

sudo chown -R `id -u` /data/db
sudo chmod -R go+w /data/db

o

sudo chown -R $USER /data/db 
sudo chmod -R go+w /data/db

La desventaja es que $ USER es una cuenta que tiene un shell de inicio de sesión. Idealmente, los demonios no deberían tener un shell por razones de seguridad, es por eso que ves / bin / false en el grep del archivo de contraseña anterior.

Marque aquí para comprender mejor el significado de los permisos del directorio:

http://www.perlfect.com/articles/chmod.shtml

Quizás también revise uno de los tutoriales que puede encontrar en Google: "UNIX para principiantes"

Tilo
fuente
2
intente hacer ls -ld /data/ y ls -ld /data/db/... verá los permisos del directorio listados en el lado izquierdo, luego la propiedad, luego el nombre del directorio. debe asegurarse de que los directorios sean editables por el ID de usuario que ejecuta MongoDB.
2
@Tilo Sí, los he hecho. El primero, el chmod salió bien, el segundo dice "chown: mongod: argumento inválido"
Nik So
3
Todo este hilo es exactamente lo que estoy pasando. Pero tampoco parece que entiendo cuál es la identificación de usuario y la identificación de grupo de mongo en mi sistema ni encuentro ninguna documentación en ningún lado. Estoy atrapado en el chong mongod: la parte mongod está regresando yinvalid arguement
Viaje el
10
Actualización fui con sudo touch /data/db/mongod.locky sudo chmod 0777 /data/db/mongd.lock. Ella comenzó de inmediato.
Viaje
141
Correr sudo chown -R `id -u` /data/dbo en sudo chown -R $USER /data/dblugar de sudo chown mongod:mongod /data/dbhacer el truco para mí
heitortsergent
117

Después de obtener el mismo error que Nik

chown: id -u: argumento no válido

Descubrí que esto aparentemente ocurrió al usar el tipo incorrecto de comillas (deberían haber sido comillas inversas ) Foros de Ubuntu

En cambio, solo usé

sudo chown $ USER / data / db

como alternativa y ahora mongod tiene los permisos que necesita.

jagough
fuente
44
Si alguien lo encuentra útil: tuve el mismo problema, pero el mensaje de error fue un poco diferente (dijo que el grupo 'mongod' no existe cuando probé chown mongod: mongod) -> sin embargo, usar chown $ USER funcionó para yo, gracias ...
trainoasis
66
Tuve que agregar un -R a esto. "sudo chown -R $ USER / data / db"
Kevin
1
Respuesta perfecta para novatos,
Pyae Sone
90

Esto funciona para mí, que se encuentra en los comentarios:

sudo chown -R $USER /data/db
Iman Mohamadi
fuente
2
Tambien para mi. Instalar mongo a través de homebrew en mi OSX no agrega un usuario y grupo mongod.
Zauker
73

Crea la carpeta.

sudo mkdir -p /data/db/

Date permiso para la carpeta.

sudo chown `id -u` /data/db

Entonces puedes correr mongodsin él sudo. Funciona en OSX Yosemite

Connor Leech
fuente
1
En lugar de crear un nuevo directorio, intente reiniciar el servicio mongod. Por ejemplo: - reinicio del servicio mongod
Devendra Bhat
bogdanmac:~ iliebogdanbarbulescu$ sudo chown `id -u` /data/db chown: /data/db: No such file or directory
bibscy
32

Para corregir ese error en OS X, reinicié y detuve el servicio: $ brew services restart mongodb $ brew services stop mongodb

Luego corrí mongod --config /usr/local/etc/mongod.confy el problema desapareció.

El error pareció surgir después de actualizar el paquete mongodb homebrew.

orluke
fuente
23

Instalación a través de brew en Mac donde YOUR_USER_NAME y el personal es el grupo

sudo mkdir -p /data/db
sudo chmod +x+r+w /data/db/
sudo touch /data/db/mongod.lock
sudo chown YOUR_USER_NAME:staff /data/db
sudo chmod +x+r+w /data/db/mongod.lock
sudo chown YOUR_USER_NAME:staff /data/db/mongod.lock
Gal Bracha
fuente
@ MarkusWMahlberg Gracias por eso. Es una de esas cosas que se sentían raras pero funcionaban. Entonces, ¿quién debe ser el propietario y el grupo de ese archivo?
Gal Bracha
Eso depende de tu distribución. Eche un vistazo al /etc/passwdnombre de usuario: es probable que el grupo sea idéntico. Por lo general, es mongoo mongodb.
Markus W Mahlberg
@MarkusWMahlberg ok, lo arreglé ahora, cuando lo instalo a través de brew no crea el usuario y el grupo, así que solo lo configuro con mi propio nombre de usuario. ver si es más seguro ahora. gracias
Gal Bracha
Gracias. Al desarrollar en mac con brew, esto soluciona el problema. No necesita más seguridad si solo está utilizando datos de prueba en mongodb. @MarkusWMahlberg en OS X, el usuario que ejecuta mongod es YOUR_USER_NAME si simplemente lo inicia con "mongod &".
gaspard
22

Si ejecuta mongo sin argumentos, se supone que está ejecutando en la máquina de producción, por lo que utiliza las ubicaciones predeterminadas.

para usar su propia base de datos (dev o simplemente una diferente):

./bin/mongod --dbpath ~/data/db
loreii
fuente
¿Esto explica por qué no usará la configuración declarada en /etc/mongod.conf? Tuve problemas con una instalación de 3.6.5 en ubuntu 16.04.
Dark Star1
intente iniciar en modo detallado (-v) o forzar explícitamente la configuración (--config): docs.mongodb.com/manual/reference/program/mongod Si instala usando apt-get, comience con el servicio mongod status / start / stop
loreii
Miré los registros de mongo. Todo seguía diciendo que la falta del directorio / data / db impedía el inicio. ¿Finalmente encontró su respuesta y esa parece ser la razón de los problemas?
Dark Star1
Esto también funciona cuando se usa MongoDB en el subsistema Linux en Windows, donde no es posible crear / data / db en la raíz fs.
hiergiltdiestfu
8

Tuve este problema con una configuración existente de Mongodb. Todavía no estoy seguro de por qué sucedió, pero por alguna razón el proceso Mongod no pudo encontrar el archivo mongod.config. Como no pudo encontrar el archivo de configuración, intentó encontrar los archivos DB en / data / db, una carpeta que no existía. Sin embargo, el archivo de configuración todavía estaba disponible, así que me aseguré de que el proceso tenga permisos para el archivo de configuración y ejecute el proceso mongod con el indicador --config de la siguiente manera:

mongod --config /etc/mongod.conf

En el archivo de configuración en sí tenía esta configuración:

storage:
  dbPath: /var/lib/mongodb

Y así es como el proceso podría encontrar la carpeta DB real nuevamente.

Tal Delbari
fuente
1
Confirmo que me pasó a mí. En lugar del archivo de configuración, podemos establecer --dbpath = / var / lib / mongodb. Pensé que había perdido todos mis datos pero todavía está allí.
lenhhoxung
8

yo hice

brew install mongodb

el 2018-02-01 y eso me dio la mongodbversión 3.6.2.

Impulsado por la respuesta de orluke anterior, intenté solo

$ brew services restart mongodb

y todo saltó a la vida. Mi mongoose.createConnection()llamada hizo lo que quería. La GUI MongoDB Compass , la versión de la comunidad, se conectaría. Usé Brújula para mirar la local.startup_logcolección. Eso tenía un documento, el registro de mí solo comenzando el servicio mongoDB, y eso tenía

cmdLine:Object
    config:"/usr/local/etc/mongod.conf"

y de hecho había tal archivo:

$ more /usr/local/etc/mongod.conf
systemLog:
  destination: file
  path: /usr/local/var/log/mongodb/mongo.log
  logAppend: true
storage:
  dbPath: /usr/local/var/mongodb
net:
  bindIp: 127.0.0.1

y había un /usr/local/var/mongodbdirectorio con muchos archivos oscuros. Parece que así es como funciona la instalación ahora.

No estoy seguro si brew services restartconfigura el servicio para que se ejecute al iniciar sesión. Así que lo hice

brew services stop mongodb
brew services start mongodb

y esperaba que volviera a comenzar después de reiniciar. Y, de hecho, lo hizo. De hecho, ahora, creo que lo correcto después de la instalación inicial es

brew services start mongodb

y eso debería iniciar el servicio y reiniciarlo después de reiniciar.

emrys57
fuente
7

Su comando habrá creado la estructura de directorios en la carpeta actual, no el directorio raíz de su computadora (que es lo que falta /).

El primer comando era correcto, pero debido a que está tratando de crear una carpeta en /, que es un directorio protegido, debe agregarle un prefijo sudo, que es la abreviatura de "superuser do". Luego se le pedirá su contraseña.

Entonces el comando completo sería:

$ sudo mkdir -p /data/db
Russell
fuente
6

Necesita crear / data / db ... que es un directorio llamado / data / en su raíz (es decir / ) y una subcarpeta allí llamada / db / ...

Obtendrá errores de permisos porque necesita usar sudo para crear un directorio en su directorio raíz en MacOS, sudo le permite ejecutar comandos como administrador.

Entonces, ejecuta esto en su lugar ...

$ sudo mkdir -p /data/db

Esto le pedirá una contraseña, es la misma contraseña que usa para cambiar la configuración del sistema (ese pequeño cuadro de diálogo que se abre cuando intenta cambiar las cosas en Preferencias del sistema para ecample), y probablemente la misma que usa para iniciar sesión.

Justin Jenkins
fuente
6

Estás intentando crear un directorio al que no tienes acceso de root.

Para probar mongodb, solo uso un directorio de mi directorio de usuario como:

cd
mkdir -p temp/
mongod --dbpath .

Esto hará una base de datos mongo en temp / desde su directorio de trabajo actual

EhevuTov
fuente
6

Superé este mismo problema creando las carpetas / data / db con mi administrador de ventanas. Al principio intenté hacerlo a través del terminal, y para crear una carpeta en el directorio raíz, tuve que usar sudo.

Simplemente fui al directorio raíz usando Finder y creé una nueva carpeta usando 'Nueva carpeta'. Totalmente trabajado para mi.

Nota: estoy usando OSX.

Jupo
fuente
5

Solo una nota rapida:

Si intentó ejecutar mongod sin cambiar primero los permisos, es probable que tenga un archivo mongod.lock (y algunos otros archivos) en el directorio / data / db. Incluso después de cambiar los permisos para el directorio / data / db para dar acceso a su $ USER, continuará recibiendo el mensaje "No se puede crear / abrir el archivo de bloqueo: /data/db/mongod.lock errno: 13 Permiso denegado "error. Ejecute ls -al / data / db y probablemente verá que los permisos para los archivos individuales todavía están configurados como root para el usuario, no para su $ USER. Debe eliminar el archivo mongod.lock y los demás también. Luego, cuando ejecute mongod nuevamente, todo debería funcionar, y puede verificar que los permisos del archivo coincidan con los permisos del directorio ejecutando ls -al nuevamente.

whiny_nil
fuente
Esta es una buena nota. No tenía un archivo de bloqueo, pero necesitaba cambiar el propietario de mis datos y carpeta db.
Caranicas
5

Crear directorio en la raíz

sudo mkdir -p /data/db

Ahora cambia el propietario

sudo chown -R $USER /data

¡Eres bueno para ir!

mongod

en lugar de usar sudo mongod, no necesita poner una contraseña cada vez, pero para el proyecto real que debe usar sudo mongod, ¡no le dé permiso al usuario normal!

BloodyLogic
fuente
4

Seguí recibiendo el siguiente error cuando intenté iniciar mongodb.

"shutting down with code:100" 

Estaba usando el siguiente comando:

./mongod --dbpath=~/mongo-data

La solución para mí fue que no necesitaba el signo "=" y esto estaba causando el error. Así que lo hice

./mongod --dbpath ~/mongo-data

Solo quería lanzar esto porque el error de ninguna manera especifica que este sea el problema. Casi eliminé el contenido del directorio ~ / mongo-data para ver si eso ayudó. Me alegra haber recordado que cli args a veces no usa el signo "=".

Cloudish123
fuente
3

Hasta esta fecha, también solía pensar que necesitamos crear esa carpeta / data / db para iniciar el comando mongod.

Pero recientemente intenté iniciar mongod con el comando de servicio y funcionó para mí y no había necesidad de crear el directorio / data / db.

service mongod start

Para verificar el estado de mongod, puede ejecutar el siguiente comando.

service mongod status
Devendra Bhat
fuente
3

Esta solución resuelve mi problema

  1. Hacer un directorio como

    sudo mkdir -p / data / db

  2. Eso creará un directorio llamado db y luego intentará comenzar con comandos

    sudo mongod

Si obtiene otro error o problema al iniciar mongod, puede encontrar el problema como

Error al configurar el escucha: SocketException: la dirección ya está en uso. Si encuentra que hay otro error que no sea el que tiene que matar el proceso en ejecución de mongod escribiendo en la terminal como

ps ax | grep mongod
sudo kill ps_number

y encuentre el puerto de ejecución mongod y elimine el proceso. Otra forma es hacer un puerto específico al iniciar mongod como

sudo mongod --port 27018
Mehedi Abdullah
fuente
2

Escriba "id" en la terminal para ver los identificadores de usuario disponibles que puede dar, luego simplemente escriba

"sudo chown -R idname / data / db"

¡Esto funcionó para mí! Espero que esto resuelva tu problema.

Prakhar Agrawal
fuente
2

En versiones más actuales de MongoDB, tengo 3.2.10, se almacena por defecto en

/var/lib/mongodb

illcrx
fuente
1
correr mongod --dbpath /var/lib/mongodbayuda en estas circunstancias
santiago arizti
1

Después de (re) instalar el paquete de herramientas, recibí un error similar en un dispositivo con Windows 10;

excepción en initAndListen: NonExistentPath: directorio de datos C: \ data \ db \ no encontrado., terminando

Solución Análoga a la explicada para los sistemas Linux: simplemente hacer que la carpeta sea suficiente para poder iniciar el mongod.exe(servidor mongoDB).

Pensé que podría dejarlo para las personas que terminan aquí con los mismos términos de búsqueda en un dispositivo Windows.

a
fuente
1

Solo quería señalar aquí que si intentas esto y te encuentras mkdir: /data/db: Read-only file system, mira este comentario, que me ayudó: https://stackoverflow.com/a/58895373 .

De esa manera, si alguien está en esta respuesta y hace el Control F para "solo lectura", verán esto

blubberbo
fuente
0

Hay una forma realmente tonta de crear este problema, que he sido pionera:

1) deje su instalación de mongo por un tiempo 2) regrese y el servidor no se esté ejecutando 3) intente iniciarlo, pero no use sudo esta vez 4) mongo no puede encontrar datos / db / porque ahora está buscando el directorio de inicio del usuario en lugar de su directorio de inicio

Sí, es realmente tonto, pero si ha pasado un tiempo desde que estabas en el sistema, puede hacerte tropezar.

Respuesta corta: asegúrese de ejecutar mongo con el mismo directorio de inicio implícito

mtyson
fuente