MongoDB no se inicia después de cambiar el directorio de datos

10

He instalado una mongodbinstancia usando yum. . Ahora todo funciona bien. Comencé el servicio usando service mongod start. Funciona bien. Luego cambié el data directoryy log pathen el archivo de configuración. Reinicié el servidor nuevamente y comencé el servicio. Pero me sale el siguiente error:

Restarting mongod (via systemctl):  Job for mongod.service failed. See 'systemctl status mongod.service' and 'journalctl -xn' for details.
                                                           [FAILED]

Cuando doy systemctl status mongod.serviceme sale lo siguiente:

 Loaded: loaded (/etc/rc.d/init.d/mongod)
   Active: failed (Result: exit-code) since Wed 2015-03-18 11:35:56 IST; 22s ago
  Process: 10672 ExecStop=/etc/rc.d/init.d/mongod stop (code=exited, status=0/SUCCESS)
  Process: 10841 ExecStart=/etc/rc.d/init.d/mongod start (code=exited, status=1/FAILURE)
 Main PID: 10509 (code=exited, status=0/SUCCESS)

Mar 18 11:35:56 localhost systemd[1]: Starting SYSV: Mongo is a scalable, document-oriented database....
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session opened for user mongod by (uid=0)
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session closed for user mongod
Mar 18 11:35:56 localhost mongod[10841]: Starting mongod: [FAILED]
Mar 18 11:35:56 localhost systemd[1]: mongod.service: control process exited, code=exited status=1
Mar 18 11:35:56 localhost systemd[1]: Failed to start SYSV: Mongo is a scalable, document-oriented database..
Mar 18 11:35:56 localhost systemd[1]: Unit mongod.service entered failed state.

Cuando doy journalctl -xnme sale lo siguiente:

-- Logs begin at Wed 2015-03-18 08:56:56 IST, end at Wed 2015-03-18 11:35:56 IST. --
Mar 18 11:30:01 localhost systemd[1]: Starting Session 20 of user root.
-- Subject: Unit session-20.scope has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit session-20.scope has begun starting up.
Mar 18 11:30:01 localhost systemd[1]: Started Session 20 of user root.
-- Subject: Unit session-20.scope has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit session-20.scope has finished starting up.
-- 
-- The start-up result is done.
Mar 18 11:30:01 localhost CROND[10712]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Mar 18 11:35:56 localhost systemd[1]: Starting SYSV: Mongo is a scalable, document-oriented database....
-- Subject: Unit mongod.service has begun with start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- 
-- Unit mongod.service has begun starting up.
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session opened for user mongod by (uid=0)
Mar 18 11:35:56 localhost runuser[10850]: pam_unix(runuser:session): session closed for user mongod
Mar 18 11:35:56 localhost mongod[10841]: Starting mongod: [FAILED]
Mar 18 11:35:56 localhost systemd[1]: mongod.service: control process exited, code=exited status=1
Mar 18 11:35:56 localhost systemd[1]: Failed to start SYSV: Mongo is a scalable, document-oriented database..
-- Subject: Unit mongod.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

¿Alguien puede ayudarme a arreglar esto? ¡¡¡Gracias!!!

PD : El directorio de datos que he creado tiene todos los permisos para el usuario. Pero, de nuevo, si cambio el directorio de datos a default ( /var/lib/mongodb) funciona bien.

ALEMÁN
fuente

Respuestas:

6

Me encontré con un problema similar y encontré que era un mongod.confarchivo mal configurado en mi caso. También podría ser que los permisos en el nuevo directorio no estén configurados correctamente. chown -R mongod:mongod <directory name>fue cómo aseguré el acceso (y, por supuesto chmod 600 <dir>, también). Por último, ejecute un ls -Zpara asegurarse de que el contexto sea correcto. Acabo de compararme con el directorio predeterminado que funcionó para mí.

Si esto aún no se ha resuelto, muestre también el contenido de su archivo de registro. Puede haber algunas pistas allí.

Tom
fuente
4

Ampliando lo que dijo @mustaccio, la respuesta para mí fue el contexto de SELinux en lo nuevo logpathy dbpath. Ejecuté los siguientes comandos y todo estuvo bien:

sudo chcon -Rv --type=mongod_log_t $logpath
sudo chcon -Rv --type=mongod_var_lib_t $dbpath

(Esto fue en RHEL 7.1 por cierto)

Ron L
fuente
4

Tenía esto en Raspberry Pi, así como en mi servidor Ubuntu.

“El trabajo para mongod.service falló. Consulte 'systemctl status mongod.service' y 'journalctl -xn' para más detalles ”.

Tuve este problema en diferentes ocasiones por diferentes razones:

  1. Archivo .conf mal nombrado: el script mongodb (al que me mudé /etc/init.d/mongodb), línea 57 CONF=/etc/mongod.confcuando estaba mi archivo real /etc/mongodb.conf. El cambio de la línea 57 lo corrigió. Además, podría haber cambiado el nombre del script de la misma manera.

  2. Archivo mongod.lock : la última vez que mongod se detuvo no tuvo la oportunidad de cerrar la base de datos. Esto deja un archivo en la carpeta de su base de datos llamado mongod.lock. Dentro de la carpeta hay un número (creo que es el PID que mongo estaba usando por última vez). Si este archivo existe, no podrá iniciar el servicio mongod. Elimine el archivo e intente nuevamente.

  3. Usuario de mongo : necesitaba crear un usuario de Linux que fuera responsable de iniciar y ejecutar el mongod.service. Llamé a mi mongo y actualicé mi /etc/init.d/mongodbscript, línea 95 para mí, por decir DAEMONUSER=${DAEMONUSER:-mongo}. Por supuesto, esto solo funcionará si ha creado un nuevo usuario llamado mongo (o lo que quiera, creo).

  4. Permisos de base de datos : este es uno popular. Una vez que declare dónde se ubicará la carpeta de la base de datos, debe asegurarse de que su usuario 'mongo' tenga la propiedad de ese archivo. Por ejemplo, mi base de datos se almacena en /data/db. Ejecuté el siguiente comando:
    sudo chown –R mongo:mongo /data
    y esto movió la propiedad de /datay todos sus subdirectorios al usuario mongo.

  5. Servicio incorrecto : este fue un poco vergonzoso para mí. Estaba tratando de comenzar mongocomo el servicio en lugar de mongod. mongoes el shell que puede ejecutar e ingresar comandos manualmente directamente a mongo. Así es como creé mi base de datos y agregué algunos objetos, por ejemplo. mongodPor otro lado, está el demonio mongo que se ejecuta en segundo plano y aloja su base de datos para otras aplicaciones a las que escribe / usa para acceder. Asegúrese de no mezclarlos en ningún lugar de sus archivos conf, scripts, etc.

Espero que uno de estos solucione el problema por usted.

En una nota al margen, mi mongodb.confarchivo está vacío. Sin embargo, incluso con él vacío, debe señalarlo correctamente.

Ryan
fuente
2

He intentado esto y funcionó.

sudo chown -R mongodb:mongodb /var/log/mongodb
sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo chmod -R 755 /var/lib/mongodb
sudo chmod -R 755 /var/log/mongodb
Mehmet Cakoglu
fuente
1

Me encontré con este problema al actualizar de mongo que viene con Centos 7 Repos, a los repositorios propios de Mongos. En efecto, la actualización de V2 a V3.

Resulta que centos 7 repo requiere el usuario mongodb , mientras que mongos own repo quiere que el usuario mongod

Al final, era el archivo de registro que aún existía de la instalación anterior en el que la nueva instalación no podía escribir, ya que los nombres de usuario eran diferentes y no me había dado cuenta.

cordero
fuente
1

En mi sistema (Fedora) tengo "/ var / log" en un tmpfs (ram), si cada vez que reinicio todo se pierde en esa partición. Muchas personas hacen esto porque tienen unidades SSD y desean reducir la E / S (ahorrando vida útil de la unidad).

La solución es crear el directorio / var / log / mongodb y establecer mongodb como propietario cada vez que se reinicia el sistema.

Use un script como:

#!/bin/sh
sudo mkdir /var/log/mongodb
sudo chown mongodb:mongodb /var/log/mongodb

Si no está seguro de cuál es el usuario que utiliza mongod, simplemente haga lo siguiente:

cat /etc/passwd | grep mongo

Agregue el script al inicio de su sistema.

Eduardo GR
fuente
0

No editas la ruta. Resolví el problema con el comando:

mongod --dbpath /data/mongo
davylin
fuente
0

Este es un problema de permiso. cuando cambiamos la ruta del directorio de datos o el archivo de registro, entonces tenemos que otorgar permisos al nuevo directorio. Entonces funciona bien. Si ocurriera algún problema como este, primero verifique el archivo de registro "mongod.log".

naveen dahiya
fuente
Esto no ayudó, le di permiso completo a la carpeta "Log" para el usuario que ejecuta el servicio mongod, estoy usando Windows Server 2016. Todavía no puedo reiniciar el servicio después de cambiar la ruta al archivo de registro, aún obteniendo error: "El servicio no responde a la función de control", ¿alguna idea por favor?
Eddie Kumar el
0

Detener el servidor MongoDB:

service mongod stop

Copie el directorio mongo al nuevo directorio:

rsync -av /var/lib/mongo /home/data/

Renombrar directorio antiguo:

mv /var/lib/mongo /var/lib/mongo.bak

Enlace simbólico a la nueva ubicación:

ln -s /home/data/mongo /var/lib/mongo

Inicie el servidor MongoDB:

service mongod start
Mohamed-yassine Belatar
fuente