macos - requerimientos - Mongod se queja de que no hay una carpeta/data/db
mongodb requerimientos (17)
Estoy usando mi nuevo mac por primera vez hoy. Estoy siguiendo la guía de inicio en mongodb.org hasta el paso donde uno crea el directorio / data / db. por cierto, he utilizado la ruta homebrew.
Así que abro una terminal, y creo que estoy en lo que llamaste Directorio principal. Cuando hago "ls", veo carpetas de la aplicación de escritorio Películas Música Imágenes Documentos y biblioteca.
Así que hice un
mkdir -p /data/db
Primero, dice permiso denegado. Seguí intentando cosas diferentes durante media hora y finalmente:
mkdir -p data/db
trabajó. y cuando "ls", existe un directorio de datos y anidado 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. sin embargo, dentro del directorio db, 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 Obteniendo mensaje de error para
sudo chown mongod:mongod /data/db
chown: mongod: Invalid argument
¡Gracias a todos!
Crea la carpeta.
sudo mkdir -p /data/db/
Date permiso para la carpeta.
sudo chown `id -u` /data/db
Entonces puedes correr mongod
sin sudo
. Funciona en OSX Yosemite
Debe crear / data / db ... que es un directorio llamado / data / en su raíz (es decir / ) y la subcarpeta allí llamada / db / ...
Recibes errores de permiso porque necesitas usar sudo para crear un direcotry en tu directorio raíz en MacOS, sudo te 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 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 las Preferencias del sistema por ejemplo), y probablemente es la misma que usa para iniciar sesión.
Después de obtener el mismo error que Nik
chown: id -u: argumento inválido
Descubrí que esto aparentemente ocurrió al usar el tipo incorrecto de comillas (deberían haber sido backquotes ) Ubuntu Forums
En vez de eso solo uso
sudo chown $ USER / data / db
como alternativa y ahora mongod tiene los permisos que necesita.
En las versiones más actuales de MongoDB, tengo 3.2.10, se almacena por defecto en
/var/lib/mongodb
Escriba "id" en la terminal para ver las ID de usuario disponibles que puede dar, luego simplemente escriba
"sudo chown -R idname / data / db"
Esto funcionó para mí! Espero que esto resuelva su problema.
Estás intentando crear un directorio al que no tienes acceso root.
Para probar mongodb, solo uso un directorio de mi directorio de usuarios como:
cd
mkdir -p temp/
mongod --dbpath .
Esto hará una base de datos mongo en temp / desde su directorio de trabajo actual
Esto funciona para mí, encontrado en los comentarios:
sudo chown -R $USER /data/db
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 service y funcionó para mí y no hubo necesidad de crear el directorio / data / db.
service mongod start
Para verificar el estado de mongod puede ejecutar el siguiente comando.
service mongod status
Instalación a través de brew en Mac, donde YOUR_USER_NAME y el personal son 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
Para corregir ese error en OS X, reinicié y detuve el servicio: $ brew services restart mongodb $ brew services stop mongodb
Luego ejecuté mongod --config /usr/local/etc/mongod.conf
, y el problema desapareció.
El error pareció surgir después de actualizar el paquete homebrew de mongodb.
Si ejecuta mongo sin argumentos, se supone que se está ejecutando en la máquina de producción, por lo que se usan las ubicaciones predeterminadas.
para usar tu propia base de datos (dev o simplemente una diferente):
./bin/mongod --dbpath ~/data/db
Solo una nota rapida:
Si intentó ejecutar mongod sin cambiar los permisos primero, 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á obteniendo el "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 aún están configurados como root para el usuario, no para su $ USER. Debes eliminar el archivo mongod.lock, y los otros también. Luego, cuando vuelva a ejecutar mongod, todo debería funcionar, y puede verificar que los permisos de los archivos coincidan con los permisos del directorio ejecutando ls -al nuevamente.
Su comando habrá creado la estructura de directorios en la carpeta actual, no en el directorio raíz de su computadora (que es lo que falta /
es).
El primer comando fue correcto, pero como está intentando crear una carpeta en /
, que es un directorio protegido, debe prefijarlo con sudo
, que es la abreviatura de "superuser do". Luego se le pedirá su contraseña.
Así que el comando completo sería:
$ sudo mkdir -p /data/db
Superé este mismo problema al crear 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 el Finder y creé una nueva carpeta usando ''Nueva carpeta''. Totalmente trabajado para mi.
Nota: estoy usando OSX.
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 de Mongod no pudo encontrar el archivo mongod.config. Debido a que 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 aún estaba disponible, así que me aseguré de que el proceso tenga permisos para el archivo de configuración y ejecutara el proceso mongod con el indicador --config de la siguiente manera:
mongod --config /etc/mongod.conf
En el propio archivo de configuración tuve esta configuración:
storage:
dbPath: /var/lib/mongodb
Y así es como el proceso podría encontrar la carpeta de base de datos real de nuevo.
yo si
brew install mongodb
el 2018-02-01 y eso me dio la versión 3.6.2 de mongodb
.
Ante la respuesta de orluke anterior, intenté solo
$ brew services restart mongodb
y todo brotó en la vida. Mi llamada mongoose.createConnection()
hizo lo que quería. La GUI MongoDB Compass , la versión de la comunidad, se conectaría. Usé Compass para mirar la colección local.startup_log
. Ese tenía un documento, el registro de mi iniciando el servicio mongoDB, y ese tenía
cmdLine:Object
config:"/usr/local/etc/mongod.conf"
y de hecho hubo 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 directorio /usr/local/var/mongodb
con muchos archivos oscuros. Así que parece ser cómo funciona la instalación ahora.
No estoy seguro de si el brew services restart
configura el servicio para que se ejecute al iniciar sesión. Así que lo hice
brew services stop mongodb
brew services start mongodb
Y espero que vuelva a empezar después del reinicio. 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.
Has creado 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 encabezado /) probablemente solo dentro de otro directorio, como el directorio principal ''/ root''.
Necesitas crear este directorio como root
O necesita usar sudo
, por ejemplo, sudo mkdir -p /data/db
O necesita hacer su -
para convertirse en superusuario, y luego crear el directorio con mkdir -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 complica ligeramente algunas cosas, como la recuperación de la base de datos, porque siempre tiene que especificar la ruta de acceso de la base de datos manualmente. Yo 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, debe ser escribible por el usuario que ejecuta el proceso MongoDB.
Para ver los permisos y la propiedad del directorio ''/ data / db /'', haga lo siguiente: (así deben 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 es el propietario del 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 de grupo de la siguiente manera: (se pueden encontrar en / etc / passwd y / etc / group)
sudo chown -R mongod:mongod /data/db
Eso debería hacer que funcione.
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. Los demonios idealmente no deberían tener un shell por razones de seguridad, es por eso que ve / bin / false en el grep del archivo de contraseña anterior.
Marque aquí para entender mejor el significado de los permisos de 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"