O MongoDB não inicia depois de alterar o diretório de dados

10

Eu instalei uma mongodbinstância usando o yum. . Agora tudo funciona bem. Comecei o serviço usando service mongod start. Isso funciona bem. Depois mudei o arquivo data directorye log pathno arquivo de configuração. Reiniciei o servidor novamente e iniciei o serviço. Mas eu recebo o erro abaixo:

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

Quando dou systemctl status mongod.service, obtenho o seguinte:

 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.

Quando dou journalctl -xn, obtenho o seguinte:

-- 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

Alguém pode me ajudar a consertar isso? Obrigado!!!

PS : O diretório de dados que criei tem todas as permissões para o usuário. Mas novamente, se eu alterar o diretório de dados para default ( /var/lib/mongodb), ele funcionará bem.

JERRY
fonte

Respostas:

6

Corri para um problema semelhante e achei que era um mongod.confarquivo mal configurado no meu caso. Também pode ser que as permissões no novo diretório não estejam definidas corretamente. chown -R mongod:mongod <directory name>foi assim que eu garanti o acesso (e claro chmod 600 <dir>que também). Por fim, execute um ls -Zpara garantir que o contexto esteja correto. Acabei de comparar com o diretório padrão que funcionou para mim.

Se isso ainda não tiver sido resolvido, mostre também o conteúdo do seu arquivo de log. Pode haver algumas pistas lá.

Tom
fonte
4

Expandindo o que o @mustaccio disse, a resposta para mim foi o contexto do SELinux no novo logpathe dbpath. Executei os seguintes comandos e tudo estava bem:

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

(isso estava no RHEL 7.1 btw)

Ron L
fonte
4

Eu tinha isso no Raspberry Pi, bem como no meu servidor Ubuntu.

“O trabalho para mongod.service falhou. Consulte 'systemctl status mongod.service' e 'journalctl -xn' para obter detalhes. ”

Eu tive esse problema em diferentes ocasiões por diferentes motivos:

  1. Arquivo .conf com nome incorreto - o script mongodb (para o qual mudei /etc/init.d/mongodb), linha 57 CONF=/etc/mongod.confquando meu arquivo real era /etc/mongodb.conf. A mudança de linha 57 a corrigiu. Além disso, eu poderia ter alterado o nome do script da mesma forma.

  2. Arquivo mongod.lock - A última vez que o mongod parou, não teve chance de fechar o banco de dados. Isso deixa um arquivo na sua pasta de banco de dados chamado mongod.lock. Dentro da pasta há um número (acredito que é o PID que o mongo estava usando por último). Se esse arquivo existir, você não poderá iniciar o serviço mongod. Exclua o arquivo e tente novamente.

  3. usuário mongo - eu precisava criar um usuário linux que seria responsável por iniciar e executar o mongod.service. Chamei meu mongo e atualizei meu /etc/init.d/mongodbscript, linha 95, para mim, para dizer DAEMONUSER=${DAEMONUSER:-mongo}. Obviamente, isso só funcionará se você tiver criado um novo usuário chamado mongo (ou o que você quiser, eu acho).

  4. Permissões de banco de dados - Essa é popular. Depois de declarar onde a pasta do banco de dados estará localizada, você precisa garantir que o usuário 'mongo' possua a propriedade desse arquivo. Por exemplo, meu banco de dados está armazenado em /data/db. Executei o seguinte comando:
    sudo chown –R mongo:mongo /data
    e isso mudou a propriedade de /datae todos os seus subdiretórios para o usuário mongo.

  5. Serviço errado - Este foi um pouco embaraçoso para mim. Eu estava tentando iniciar mongocomo o serviço em vez de mongod. mongoé o shell que você pode executar e inserir comandos manualmente diretamente para o mongo. Foi assim que criei meu banco de dados e adicionei alguns objetos, por exemplo. mongodpor outro lado, é o daemon mongo que é executado em segundo plano, hospedando seu banco de dados para outros aplicativos que você escreve / usa para acessar. Certifique-se de não misturá-los em nenhum lugar nos seus arquivos conf, scripts etc.

Espero que um deles resolva o problema para você.

Em uma nota lateral, meu mongodb.confarquivo está vazio. Mesmo com ele vazio, você precisa apontar para ele corretamente.

Ryan
fonte
2

Eu tentei isso e funcionou.

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
fonte
1

Encontrei este problema ao atualizar o mongo que acompanha o Centos 7 Repos, para os próprios repositórios do Mongos. Com efeito, atualizando da V2 para a V3.

Acontece que o centos 7 repo requer o usuário mongodb , enquanto o mongos próprio repo deseja que o usuário mongod

No final, era o arquivo de log que ainda existia na instalação antiga que a nova instalação não pôde gravar, pois os nomes de usuário eram diferentes e eu não havia notado.

muttonUp
fonte
1

No meu sistema (Fedora) eu tenho "/ var / log" em um tmpfs (ram), e cada vez que reinicializo tudo na partição se perde. Muitas pessoas fazem isso porque possuem unidades SSD e desejam reduzir a E / S (economia da vida útil da unidade).

A solução é criar o diretório / var / log / mongodb e definir o mongodb como proprietário toda vez que o sistema for reiniciado.

Use um script como:

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

Se você não tiver certeza de qual é o usuário usado pelo mongod, basta:

cat /etc/passwd | grep mongo

Adicione o script à inicialização do sistema.

Eduardo GR
fonte
0

Você não edita o caminho. Eu resolvi o problema pelo comando:

mongod --dbpath /data/mongo
davylin
fonte
0

Este é um problema de permissão. quando mudamos o caminho do diretório de dados ou do arquivo de log, precisamos dar permissões ao novo diretório. Então corre bem. Se ocorreu algum problema como esse, verifique primeiro o arquivo de log "mongod.log".

naveen dahiya
fonte
Isso não ajudou, dei permissão total para a pasta "Log" para o usuário que está executando o serviço mongod, estou usando o Windows Server 2016. Ainda não consigo reiniciar o serviço depois de alterar o caminho para o arquivo de log, ainda obtendo erro: "O serviço não está respondendo à função de controle.", alguma idéia, por favor?
Eddie Kumar
0

Pare o MongoDB Server:

service mongod stop

Copie o diretório mongo para o novo diretório:

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

Renomeie o diretório antigo:

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

Link simbólico para o novo local:

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

Inicie o MongoDB Server:

service mongod start
Mohamed-yassine Belatar
fonte