Mongod reclama que não há pasta / data / db

475

Estou usando meu novo mac pela primeira vez hoje. Estou seguindo o guia de introdução no mongodb.org até a etapa em que se cria o diretório / data / db. Aliás, eu usei a rota homebrew.

Então, abro um terminal e acho que estou no que você chamou de Diretório Inicial, pois quando eu faço "ls", vejo pastas de Documentos e Biblioteca de Filmes e aplicativos de área de trabalho Filmes e Imagens de filmes.

Então eu fiz um

mkdir -p /data/db

primeiro, diz permissão negada. Continuei tentando coisas diferentes por meia hora e finalmente:

mkdir -p data/db

trabalhou. e quando eu "ls", existe um diretório de dados e aninhado nele uma pasta db.

então eu inicio o mongod e ele reclama por não encontrar dados / db

Fiz algo errado?

Agora eu fiz o

sudo mkdir -p /data/db

e quando eu faço um "ls", vejo o diretório de dados e o diretório db. dentro do diretório db, porém, não há absolutamente nada nele e quando agora corro o 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

EDIT Recebendo mensagem de erro para

sudo chown mongod:mongod /data/db

chown: mongod: Invalid argument

Obrigado a todos!

Nik So
fonte
1
o "argumento inválido" significa que o nome simbólico do usuário do mongo é diferente no seu sistema - você provavelmente está usando um pacote ou mecanismo de instalação diferente para instalar o MongoDB. Você deve verificar seus arquivos / etc / passwd e / etc / group quanto ao nome simbólico (ou uid / gid) do usuário do mongo grep mongo /etc/passwd /etc/group. Se isso não funcionar, verifique o nome verificando o proprietário do diretório ls -ld /var/lib/mongo. Ou para ver o uid / gid fazer isso: ls -lnd /var/lib/mongo. No meu caso drwxr-xr-x. 6 *487 480* 4096 Sep 20 2011 ...- isso significa usar 487: 480 como o param
Tilo
usar o UID / GID é sinônimo de usar o nome simbólico. por exemplo, basta substituir 'mongod: mongod com o uid / gid números que você encontrou com o método acima ..
Tilo
Agora que sabemos como adicionar corretamente esse diretório (data / db), por que esse diretório não foi incluído na instalação em primeiro lugar?
winux 28/11/18
Se você apenas atualizado para MacOS 10,15, esta resposta pode ajudar: stackoverflow.com/questions/58283257/...
Adam Zerner
se você possui a última versão do MAC: Com a nova atualização do macOS Catalina, a pasta "/ data / db" torna-se somente leitura, não é possível modificá-la. Siga este procedimento para criar um banco de dados em outra pasta: 1) Altere o diretório mongod: sudo mongod --dbpath / Sistema / Volumes / Dados / dados / db 2) Dê um alias: alias mongod = "sudo mongod --dbpath / System / Volumes / Dados / dados / db "
Farbod

Respostas:

636

Você criou o diretório no lugar errado

/ data / db significa que está diretamente sob o diretório raiz '/', enquanto você criou 'data / db' (sem o / principal) provavelmente dentro de outro diretório, como o diretório doméstico '/ root'.

Você precisa criar este diretório como root

Você precisa usar sudo, por exemplosudo mkdir -p /data/db

Ou você precisa fazer su -para se tornar superusuário e criar o diretório commkdir -p /data/db


Nota:

O MongoDB também tem uma opção em que você pode criar o diretório de dados em outro local, mas isso geralmente não é uma boa ideia, porque apenas complica um pouco as coisas, como a recuperação do banco de dados, porque você sempre precisa especificar o caminho do db manualmente. Eu não recomendaria fazer isso.


Editar:

a mensagem de erro que você recebe é "Não é possível criar / abrir o arquivo de bloqueio: /data/db/mongod.lock errno: 13 Permissão negada" . O diretório que você criou não parece ter as permissões e a propriedade corretas - ele precisa ser gravável pelo usuário que executa o processo do MongoDB.

Para ver as permissões e a propriedade do diretório '/ data / db /', faça o seguinte: (é assim que as permissões e a propriedade devem se parecer)

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

O lado esquerdo 'drwxr-xr-x' mostra as permissões para o usuário, grupo e outros. 'mongod mongod' mostra quem é o proprietário do diretório e a qual grupo esse diretório pertence. Ambos são chamados de 'mongod' neste caso.

Se o diretório '/ data / db' não tiver as permissões e a propriedade acima, faça o seguinte :

Primeiro verifique qual usuário e grupo seu usuário mongo possui:

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

Você deve ter uma entrada para mongod em / etc / passwd, pois é um daemon.

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

Você também pode usar o nome de usuário e o nome do grupo, da seguinte maneira: (eles podem ser encontrados em / etc / passwd e / etc / group)

sudo chown -R mongod:mongod /data/db 

isso deve fazer funcionar ..

Nos comentários abaixo, algumas pessoas usaram isso:

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

ou

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

A desvantagem é que $ USER é uma conta que possui um shell de login. O ideal é que os daemons não tenham um shell por motivos de segurança, por isso você vê / bin / false no grep do arquivo de senhas acima.

Verifique aqui para entender melhor o significado das permissões do diretório:

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

Talvez também confira um dos tutoriais que você pode encontrar no Google: "UNIX para iniciantes"

Tilo
fonte
2
tente fazer ls -ld /data/ e ls -ld /data/db/.. você verá as permissões de diretório listadas no lado esquerdo, a propriedade e o nome do diretório. você deve certificar-se de que os diretórios sejam graváveis ​​pelo ID do usuário que executa o MongoDB.
2
@ Tilo Sim, eu os fiz. O primeiro, o chmod, deu certo, o segundo diz "chown: mongod: argumento inválido"
Nik So
3
Esta é toda a discussão é exatamente o que estou passando. Mas também não consigo entender qual é o ID do usuário e o ID do grupo do mongo no meu sistema, nem encontro nenhuma documentação nele em nenhum lugar. Eu estou preso no mongod chown: mongod parte como retornando uminvalid arguement
Trip
10
Atualização eu fui com sudo touch /data/db/mongod.locke sudo chmod 0777 /data/db/mongd.lock. Ela começou logo.
Trip
141
Correndo sudo chown -R `id -u` /data/dbou sudo chown -R $USER /data/dbem vez de sudo chown mongod:mongod /data/dbfez o truque para mim
heitortsergent
117

Depois de receber o mesmo erro que Nik

chown: id -u: argumento inválido

Eu descobri isso aparentemente ocorreu de usar o tipo errado de aspas (deve ter sido crase ) Emotikongs

Em vez disso, eu apenas usei

sudo chown $ USER / data / db

como alternativa e agora o mongod tem as permissões necessárias.

jagough
fonte
4
Se alguém achar útil: Tive o mesmo problema, mas a mensagem de erro era um pouco diferente (disse que o grupo 'mongod' não existe quando tentei chown mongod: mongod) -> no entanto, usando chown $ USER trabalhou para eu, obrigado ...
trainoasis
6
Eu tive que adicionar um -R a isso. "sudo chown -R $ USER / data / db"
Kevin
1
Resposta perfeita para iniciantes,
Pyae Sone
90

Isso funciona para mim, encontrado nos comentários:

sudo chown -R $USER /data/db
Iman Mohamadi
fonte
2
Também para mim. Instalar o mongo via homebrew no meu OSX não adiciona um usuário e um grupo do mongod.
Zauker 23/09/16
73

Crie a pasta

sudo mkdir -p /data/db/

Permita-se para a pasta.

sudo chown `id -u` /data/db

Então você pode correr mongodsem sudo. Funciona no OSX Yosemite

Connor Leech
fonte
1
Em vez de criar um novo diretório, tente reiniciar o serviço mongod. Por exemplo: - service mongod restart
Devendra Bhat
bogdanmac:~ iliebogdanbarbulescu$ sudo chown `id -u` /data/db chown: /data/db: No such file or directory
bibscy 16/04
32

Para corrigir esse erro no OS X, reiniciei e parei o serviço: $ brew services restart mongodb $ brew services stop mongodb

Então eu corri mongod --config /usr/local/etc/mongod.confe o problema se foi.

O erro pareceu surgir após a atualização do pacote homebrew do mongodb.

orluke
fonte
23

Instalando através do brew no Mac, em que YOUR_USER_NAME e a equipe são o 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
fonte
@MarkusWMahlberg Obrigado por isso. é uma daquelas coisas que parecia estranha, mas funcionava. então quem deve ser o proprietário e o grupo desse arquivo?
Gal Bracha
Isso depende da sua distribuição. Dê uma olhada no /etc/passwdnome de usuário - é provável que o grupo seja idêntico. Geralmente é mongoou mongodb.
Markus W Mahlberg
@MarkusWMahlberg ok - Corrigi-o agora - ao instalar através do brew, ele não cria o usuário e o grupo, então apenas o defino como meu próprio nome de usuário. veja se é mais seguro agora. obrigado
Gal Bracha
Obrigado. Ao desenvolver no mac com o brew, isso corrige o problema. Não há necessidade de mais segurança se você estiver apenas usando dados de teste no mongodb. @ MarkusWMahlberg no OS X, o usuário executando o mongod é YOUR_USER_NAME se você simplesmente iniciar com "mongod &".
gaspard
22

Se você executar o mongo sem argumentos, presume-se que você esteja executando na máquina de produção, portanto use os locais padrão.

para usar seu próprio banco de dados (dev ou apenas um diferente):

./bin/mongod --dbpath ~/data/db
loreii
fonte
Isso explica por que não usará as configurações declaradas no /etc/mongod.conf? Teve problemas com a instalação do 3.6.5 no ubuntu 16.04.
Escuro Star1
tente iniciar no modo detalhado (-v) ou force explicitamente a configuração (--config): docs.mongodb.com/manual/reference/program/mongod Se você instalar usando o apt-get, inicie-o com o serviço mongod status / start / stop
loreii 27/06
Eu olhei para os logs do mongo. Tudo o que dizia era que a falta do diretório / data / db estava impedindo a inicialização. Eventualmente, deparei com sua resposta e esse parece ser o motivo dos problemas?
usar o seguinte
Isso também funciona ao usar o MongoDB no subsistema Linux no Windows, onde não é possível criar / data / db na raiz fs.
hiergiltdiestfu
8

Eu tive esse problema com uma instalação existente do Mongodb. Ainda não sei por que isso aconteceu, mas por algum motivo o processo Mongod não conseguiu encontrar o arquivo mongod.config. Como não foi possível encontrar o arquivo de configuração, ele tentou encontrar os arquivos do banco de dados em / data / db, uma pasta que não existia. No entanto, o arquivo de configuração ainda estava disponível, portanto, certifiquei-me de que o processo tenha permissões para o arquivo de configuração e execute o processo mongod com o sinalizador --config da seguinte maneira:

mongod --config /etc/mongod.conf

No próprio arquivo de configuração, eu tinha essa configuração:

storage:
  dbPath: /var/lib/mongodb

E é assim que o processo pode encontrar a pasta DB real novamente.

Tal Delbari
fonte
1
Eu confirmo que aconteceu comigo. Em vez do arquivo de configuração, podemos apenas definir --dbpath = / var / lib / mongodb. Eu pensei que tinha perdido todos os meus dados, mas ainda está lá.
Lenhhoxung
8

eu fiz

brew install mongodb

em 2018-02-01 e isso me deu mongodb versão 3.6.2.

Solicitado pela resposta do orluke acima, tentei apenas

$ brew services restart mongodb

e tudo surgiu na vida. Minha mongoose.createConnection()ligação fez o que eu queria. A GUI MongoDB Compass , a versão da comunidade, se conectaria. Usei o Compass para ver a local.startup_logcoleção. Que tinha um documento, o meu logon apenas iniciando o serviço mongoDB, e que tinha

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

e de fato havia um arquivo assim:

$ 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

e houve um /usr/local/var/mongodb diretório com muitos arquivos obscuros. Então parece que é assim que a instalação funciona agora.

Não tenho certeza se brew services restartdefine o serviço para ser executado no login. Então eu fiz

brew services stop mongodb
brew services start mongodb

e esperava que iniciasse novamente após a reinicialização. E, de fato, aconteceu. De fato, agora, acho que a coisa certa a fazer após a instalação inicial é

brew services start mongodb

e isso deve iniciar o serviço e reiniciá-lo após a reinicialização.

emrys57
fonte
7

Seu comando terá criado a estrutura de diretórios na pasta atual, não o diretório raiz do seu computador (que é o que está faltando). / ).

O primeiro comando estava correto, mas como você está tentando criar uma pasta /, que é um diretório protegido, é necessário prefixá-lo comsudo , que é a abreviação de "superuser do". Você será solicitado a fornecer sua senha.

Portanto, o comando completo seria:

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

Você precisa criar / data / db ... que é um diretório chamado / data / em sua raiz (ou seja, / ) e uma subpasta chamada / db / ...

Você está recebendo erros de permissão porque precisa usar o sudo para criar um diretório no diretório raiz do MacOS, o sudo permite executar comandos como administrador.

Então, execute isso em vez disso ...

$ sudo mkdir -p /data/db

Isso solicitará uma senha, é a mesma senha usada para alterar as configurações do sistema (aquela pequena caixa de diálogo que é aberta quando você tenta alterar as coisas nas Preferências do Sistema, por exemplo) e provavelmente a mesma que você usa para fazer login.

Justin Jenkins
fonte
6

Você está tentando criar um diretório ao qual não tem acesso root.

Para testar o mongodb, eu apenas uso um diretório do meu diretório de usuário como:

cd
mkdir -p temp/
mongod --dbpath .

Isso criará um banco de dados mongo em temp / do seu diretório de trabalho atual

EhevuTov
fonte
6

Eu superei exatamente esse mesmo problema criando as pastas / data / db com o meu gerenciador de janelas. Tentei fazê-lo através do terminal a princípio e, para criar uma pasta no diretório raiz, tive que usar o sudo.

Eu apenas fui ao diretório raiz usando o Finder e criei uma nova pasta usando 'Nova Pasta'. Totalmente funcionou para mim.

Nota: estou usando o OSX.

Jupo
fonte
5

Apenas uma nota rápida:

Se você tentou executar o mongod sem alterar as permissões primeiro, provavelmente terá um arquivo mongod.lock (e alguns outros arquivos) no diretório / data / db. Mesmo depois de alterar as permissões do diretório / data / db para dar acesso ao seu $ USER, você continuará recebendo a mensagem "Não foi possível criar / abrir o arquivo de bloqueio: /data/db/mongod.lock errno: 13 Permissão negada "erro. Execute ls -al / data / db e provavelmente verá que as permissões para os arquivos individuais ainda estão definidas como raiz para o usuário, não para o seu $ USER. Você deve remover o arquivo mongod.lock e os outros também. Então, quando você executa o mongod novamente, tudo deve funcionar e você pode verificar se as permissões do arquivo correspondem às permissões do diretório executando ls -al novamente.

whiny_nil
fonte
Esta é uma boa nota. Eu não tinha um arquivo de bloqueio, mas precisava alterar o proprietário dos meus dados e da pasta db.
Caranicas
5

Criar diretório na raiz

sudo mkdir -p /data/db

Agora mude o proprietário

sudo chown -R $USER /data

Você está pronto para ir!

mongod

em vez de usar sudo mongod, você não precisa colocar uma senha permanente, mas para o projeto real que você deve usar sudo mongod, não dê permissão ao usuário normal!

BloodyLogic
fonte
4

Eu continuei recebendo o seguinte erro ao tentar iniciar o mongodb.

"shutting down with code:100" 

Eu estava usando o seguinte comando:

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

A correção para mim foi que eu não precisava do sinal "=" e isso estava causando o erro. Então eu fiz

./mongod --dbpath ~/mongo-data

Só queria jogar isso lá fora, porque o erro de forma alguma especifica que este é o problema. Eu quase removi o conteúdo do diretório ~ / mongo-data para ver se isso ajudou. Ainda bem que lembrei que os clientes às vezes não usam o sinal "=".

Cloudish123
fonte
3

Até essa data, eu também pensava que precisamos criar essa pasta / data / db para iniciar o comando mongod.

Mas, recentemente, tentei iniciar o mongod com o comando service e funcionou para mim e não havia necessidade de criar o diretório / data / db.

service mongod start

Para verificar o status do mongod, você pode executar o seguinte comando.

service mongod status
Devendra Bhat
fonte
3

Esta solução resolve meu problema

  1. Crie um diretório como

    sudo mkdir -p / data / db

  2. Isso criará um diretório chamado db e tentará iniciar com comandos

    sudo mongod

Se você receber outro erro ou problema ao iniciar o mongod, poderá encontrar um problema como

Falha ao configurar o ouvinte: SocketException: Endereço já em uso Se você encontrar outro erro além do que você precisa para interromper o processo de execução do mongod, digitando no terminal como

ps ax | grep mongod
sudo kill ps_number

e encontre o mongod em execução na porta e mate o processo. Outra maneira é criar uma porta específica ao iniciar o mongod como

sudo mongod --port 27018
Mehedi Abdullah
fonte
2

Digite "id" no terminal para ver os IDs de usuário disponíveis que você pode fornecer. Em seguida, basta digitar

"sudo chown -R idname / data / db"

Isso funcionou para mim! Espero que isso resolva seu problema.

Prakhar Agrawal
fonte
2

Nas versões mais atuais do MongoDB, tenho 3.2.10, ele é armazenado como padrão no

/var/lib/mongodb

illcrx
fonte
1
correndo mongod --dbpath /var/lib/mongodbajuda nestas circunstâncias
santiago Arizti
1

Depois de (re) instalar o pacote de ferramentas, recebi um erro semelhante em um dispositivo Windows 10;

exceção em initAndListen: NonExistentPath: diretório de dados C: \ data \ db \ não encontrado., finalizando

Solução Analógica conforme explicada nos sistemas Linux: basta criar a pasta para poder iniciar o mongod.exe(servidor mongoDB).

Achei que poderia deixar para as pessoas que acabam aqui com os mesmos termos de pesquisa em um dispositivo Windows.

às
fonte
1

Eu só queria salientar aqui que, se você tentar isso e se deparar com mkdir: /data/db: Read-only file system, por favor, veja este comentário, que me ajudou: https://stackoverflow.com/a/58895373 .

Dessa forma, se alguém estiver nessa resposta e fizer o Controle F como "somente leitura", eles verão isso

blubberbo
fonte
0

Existe uma maneira realmente idiota de criar esse problema, do qual fui pioneiro:

1) deixe a instalação do mongo por um tempo 2) volte e o servidor não está funcionando 3) tente iniciá-lo, mas não use o sudo desta vez 4) o mongo não consegue encontrar dados / db / porque agora está procurando o diretório inicial do usuário em vez de su home dir

Sim, é realmente idiota, mas se já faz um tempo desde que você estava no sistema, pode enganá-lo.

Resposta curta: certifique-se de executar o mongo com o mesmo diretório inicial implícito

mtyson
fonte