MongoDB: exceção em initAndListen: 20 Tentativa de criar um arquivo de bloqueio em um diretório somente leitura: / data / db, finalizando

146

Eu criei /data/dbno diretório raiz e executei ./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
fonte
4
parece um problema de permissões. O usuário que está executando o mongod tem permissão para gravar no diretório / data / db? Compartilhe a saída de ls -ld /data/dbe idpara que possamos aconselhar.
Bjorn Roche
drwxr-xr-x 2 raiz raiz 4096
whinytween96
uid = 1000 (usuário) gid = 1000 (usuário) grupos = 1000 (usuário), 4 (adm), 24 (cdrom), 27 (sudo), 30 (dip), 46 (plugdev), 113 (lpadmin), 128 (sambashare)
whinytween96
@BjornRoche obrigado pela -ldparte :)
Skynet
@BjornRoche minha saída é drwxrwxrwx. 4 mongod mongod 4096 Sep 17 18:18 /data/dbe ainda estou recebendo o erro. Alguma ideia?
Blake

Respostas:

278

O problema é que o diretório que você criou /data/dbpertence e é gravável apenas pelo usuário root, mas você está executando o mongod como você. Existem várias maneiras de resolver isso, mas, em última análise, você deve conceder as permissões corretas ao diretório em questão. Se for para produção, aconselho que você verifique os documentos e pense sobre isso com cuidado - você provavelmente deseja tomar um cuidado especial.

No entanto, se isso é apenas para teste e você só precisa trabalhar e continuar com isso, você pode tentar isso, o que tornará o diretório gravável por todos:

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

ou isso, que fará com que o diretório seja de sua propriedade:

> sudo chown -R $USER /data/db
Bjorn Roche
fonte
4
Eu acho que alguém pode precisar -Ralterar todos os /data/dbarquivos dentro de forma recursiva.
YongHao Hu
2
Obrigado por isso. Tentei e ainda obtendo o mesmo erro #
315 Samuel Dare
1
Este tópico já é um pouco antigo, mas para mim, o uso chmodgerou um novo erro initAndListen : operation not permitted, mas chownfuncionou.
bachinblack
chown fez isso por mim também
dwagnerkc
É uma prática ruim atribuir 777 umask a um diretório. Você pode definir 755 e funcionachmod -R 755 /data/db
Juan-Kabbali
60

Em um Mac, eu tinha que fazer o seguinte:

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

porque havia também um arquivo no /tmpqual o Mongo também precisava de acesso

Santiago Martí Olbrich
fonte
2
Funciona no Fedora 28 Linux
Samuel Ivan
2
Isso deve estar no topo
Yashwanth Kambala
isso fez isso por mim também.
Canovice 16/01
25

Se o seu sistema estiver usando o SELinux, certifique-se de usar o contexto correto para o diretório que você criou:

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

e clone o contexto com:

chcon -R --reference=/var/lib/mongo /data/db
drrossum
fonte
1
Você salvou o meu dia! Muito obrigado
Keerthivasan
2
ls -dZ / var / lib / mongodb / para versões posteriores do mongo
espeed
17

Eu experimentei o mesmo problema e a seguinte solução resolveu esse problema. Você deve tentar a seguinte solução.

sudo mkdir -p / data / db
sudo chown -R 'nome de usuário' / data / db

Hamdi Bayhan
fonte
9

insira a descrição da imagem aquiAntes de tudo, pare todos os serviços do mongoDB e crie um diretório /, isso significa raiz, se você não tiver, e remova também o arquivo da porta. conceda toda a permissão a esse diretório, torne-se o proprietário desse diretório, execute o comando abaixo:

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

Agora que você terminou, basta iniciar o serviço MongoDB, se não ajudou, tente alterar a porta como:

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

Nota: Para mim, tudo isso funciona e espero que funcione para você, cara!

Código
fonte
5

Corrija as permissões de /data/db(ou /var/lib/mongodb):

sudo chown -R mongodb: /data/db

reinicie o MongoDB, por exemplo, usando

sudo systemctl restart mongod

Caso isso não ajude, verifique sua mensagem de erro se você estiver usando um diretório de dados diferente de / var / lib / mongodb. Nesse caso, execute

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

fonte

plcosta
fonte
4

Soluções agradáveis, mas eu me pergunto por que ninguém está dando a solução para o Windows.

Se você estiver usando o Windows, basta "Executar como Administrador" o cmd.

Enrique Benito Casado
fonte
6
Eu acho que é porque as pessoas normalmente não executam servidores de banco de dados no Windows.
Blake
1
Além disso, é uma má idéia para executar um banco de dados como administrador / root, verificar outros comentários aqui como este para mais detalhes
Nino Filiu
4

Se você está verificando seus logs do mongodb e está recebendo esse erro, basta seguir as etapas como eu fiz. Isso ocorre devido a problemas de permissão no seu /data/dbdiretório. Estou usando o ubuntu16.04 e encontro solução com a execução de dois comandos simples, como segue.

Etapa 1: conceda permissão ao diretório / data / db:

sudo chmod -R 0777 /data/db

Etapa 2: tente iniciar o serviço mongod como:

sudo service mongod start

Etapa 3: verificar o status do serviço mongod:

sudo service mongod status
Jitendra
fonte
2
A etapa 1 concederá permissões de leitura / gravação / execução a todos os usuários. Isso não deve ser usado.
Jonas Franz
Obrigado, @JonasFranz, pelo seu feedback. Nesse caso, podemos usar a permissão 0755 para o servidor de produção. Por favor corrija-me se eu estiver errado.
Jitendra
3

Se você não precisar ter os diretórios do banco de dados na raiz, poderá criar data/dbno seu diretório pessoal ( mkdir -p ~/data/db).

Depois, você pode iniciar o servidor MongoDB com a --dbpathopção:

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

(Isso pressupõe que você o esteja iniciando a partir de um terminal. Por algum motivo estranho, mongodnão aceita ~ como o caminho do diretório inicial, portanto, os truques de substituição do eco do bash, você também pode escrever /home/yourusername/data/db)

Na verdade, ele não precisa estar ~/data/db, pode estar em qualquer lugar que você quiser e, dessa forma, você pode ter vários caminhos de banco de dados e organizar tudo muito bem. Pode não ser a melhor opção para produção (dependendo do que você deseja fazer), mas para o desenvolvimento funciona bem.

Kresimir
fonte
3

Eu lidei com o mesmo problema:

Mude para o diretório MongoDB que contém o bindiretório e execute:

sudo bin/mongod 

Ao executar o MongoDB como usuário root, você pode ser solicitado a digitar a senha root. Se você ainda não pode executar o MongoDB, verifique as permissões para o diretório de dados do MongoDB. Entrar:

ls -ld /data

ou digite ls -l /as permissões para todos os diretórios e arquivos no diretório, incluindo o /datadiretório.

O modo de permissão para o usuário root deve ser " rwx", o que significa que ele pode ler, gravar e executar os arquivos. Para fazer isso acontecer, usamos:

chmod 755 /data 

755é uma notação octal para definir as permissões do /datadiretório como " rwxr-xr-x", o que significa que o usuário raiz pode ler, escrever e executar, enquanto o "grupo" e "todos" são capazes de ler e executar apenas.

Nota: Quando não puder fazer isso, digite:

sudo chmod 755 /data   

para definir a permissão como usuário root.

Em seguida, ao concluir essa etapa, recupere os modos de permissão usando:

ls -ld /data

que deve se parecer com:

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

Você não precisa se preocupar com o " d" no início e observe que as permissões refletem " rwxr-xr-x".

Agora você pode voltar ao diretório MongoDB e digitar:

sudo bin/mongod  

para executar o MongoDB.

yifan li
fonte
2
Má ideia, NUNCA execute-o como sudo. Existem soluções melhores que gerenciam o usuário / grupo para mongod ou mongodb, dependendo da sua distribuição. Não use esta solução.
Andy
2

você só precisa executar o comando como superusuário:

basta digitar no terminal: sudo su mongod

David Noleto
fonte
1
É sempre uma má idéia executar programas como esse como superusuário. O seu melhor para corrigir as permissões das pastas
Jason
2

Se você está no Windows e está tentando configurar o MongoDB, execute o cmd como o Admnistrator é o caminho a seguir, como Enrique sugeriu acima, veja aqui

Adewale Olaoye
fonte
-1

Isso funcionou para mim no Ubuntu LTS 20.04:

$ sudo service mongod start
sagar kumar
fonte
1
Por favor, explique por que você acha que também funcionará para os outros!
sauhardnc
1
Descreva a resolução com mais detalhes, com mais informações, como explicar o motivo real, adicionar o snippet de código de trabalho e as etapas a serem executadas para erradicar os problemas. Para mais detalhes, visite as diretrizes do StackOverflow.
Kapil Raghuwanshi