O MongoDB não consegue encontrar o diretório de dados após a atualização para o Mac OS 10.15 (Catalina)

61

Atualizei para o MacOS 10.15 (Catalina) hoje. Quando corro mongodno terminal, ele não consegue encontrar o /data/dbdiretório:

  /Users/william > mongod
2019-10-08T17:02:44.183+0800 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] MongoDB starting : pid=43162 port=27017 dbpath=/data/db 64-bit host=Williams-MacBook-Pro-6.local
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] db version v4.0.3
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] git version: 7ea530946fa7880364d88c8d8b6026bbc9ffa48c
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] allocator: system
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] modules: none
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] build environment:
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten]     distarch: x86_64
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten]     target_arch: x86_64
2019-10-08T17:02:44.209+0800 I CONTROL  [initandlisten] options: {}
2019-10-08T17:02:44.211+0800 I STORAGE  [initandlisten] exception in initAndListen: NonExistentPath: Data directory /data/db not found., terminating
2019-10-08T17:02:44.211+0800 I NETWORK  [initandlisten] shutdown: going to close listening sockets...
2019-10-08T17:02:44.211+0800 I NETWORK  [initandlisten] removing socket file: /tmp/mongodb-27017.sock
2019-10-08T17:02:44.211+0800 I CONTROL  [initandlisten] now exiting
2019-10-08T17:02:44.211+0800 I CONTROL  [initandlisten] shutting down with code:100
  /Users/william > 

Tentei instalar o MongoDB com brew:

brew install mongodb

  /Users/william > brew install mongodb
Updating Homebrew...
Error: mongodb: unknown version :mountain_lion

Qualquer ajuda?

William Hu
fonte

Respostas:

91

Este é o principal erro:

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

Catalina teve uma mudança surpresa: não permitirá alterações no diretório raiz (isso também foi discutido em um tópico do fórum ):

% sudo mkdir -p /data/db
mkdir: /data/db: Read-only file system

Infelizmente, isso não está explicitamente explicitado nas notas de versão da Apple Catalina , exceto uma breve menção nos recursos da Catalina :

O macOS Catalina é executado em um volume de sistema dedicado, somente leitura

Como o diretório /data/dbé codificado como padrão do MongoDB, uma solução alternativa é especificar um diferente dbpathque não esteja localizado no diretório raiz. Por exemplo:

mongod --dbpath ~/data/db

Isso colocará os dados do MongoDB em seu diretório pessoal. Apenas verifique se o caminho ~/data/dbrealmente existe.

Método alternativo

Um método alternativo é seguir as instruções em Instalar o MongoDB Community Edition no macOS , aproveitando brew:

brew tap mongodb/brew
brew install mongodb-community

Isso criará alguns arquivos adicionais por padrão:

  • o arquivo de configuração (/usr/local/etc/mongod.conf)
  • o caminho do diretório de log (/ usr / local / var / log / mongodb)
  • o caminho do diretório de dados (/ usr / local / var / mongodb)

Para executar, mongodvocê pode:

  • Execute o comando manualmente a partir da linha de comando (isso pode ser um alias por conveniência):

    mongod --config /usr/local/etc/mongod.conf
  • Execute o MongoDB como um serviço usando brew services. Observe que isso executará o MongoDB como um nó independente (não um conjunto de réplicas), portanto, os recursos que dependem do oplog, por exemplo, changestreams, não funcionarão, a menos que você modifique o mongodarquivo de configuração:

    brew services start mongodb-community
kevinadi
fonte
Obrigado pela resposta, algum método para configurar o dbpath no bash_profile? portanto, não há necessidade de executar o mongod com o caminho db todas as vezes.
Madhavan Sundararaj
Eu acho que, após a atualização, OS excluídos / dados / db pasta que estava presente mongodb sob
Madhavan Sundararaj
11
@MadhavanSundararaj se você quiser rodar mongodb --dbpath ...apenas digitando mongodbash, você pode usar um apelido como alias mongod='mongod --dbpath ...'e colocar esse apelido no seu bashrc. Não é a solução mais limpa, mas pode funcionar para seus propósitos.
kevinadi
O último macOS não usa o zsh? Nesse caso, ele ainda usa .bashrc. Como o alias sugerido acima não funcionou como esperado #
Madhavan Sundararaj
11
@MadhavanSundararaj para zshou qualquer outro shell, você precisa colocar o alias no arquivo rc desse shell. Pois zshé ~/.zshrc. Certifique-se de seguir também a sintaxe do shell ao criar aliases.
kevinadi
61

Depois de instalar o Catalina, você pode ter uma pasta na área de trabalho chamada Relocated Items. Você pode encontrar a data/dbpasta dentro da Securitypasta.

Tudo o que eu precisava fazer era mover o Security/data/dbespecificamente data/dbe colocá-lo na minha pasta pessoal.

Você pode fazer isso com o aplicativo Finder ou com o terminal executando o seguinte comando:

sudo mv /Users/Shared/Relocated\ Items/Security/data ~/

Após essa execução: mongod --dbpath ~/data/db

Cabe a você criar o alias anteriormente

Marnix Harderwijk
fonte
6
Eu quase enlouqueci que o upgrade da Catalina pudesse ter apagado todos os meus dados. Obrigado por me salvar da loucura!
Adam Bubela 20/10/19
11
Obrigado @MarnixHarderwijk, funciona para mim.
Zeeyed 21/10/19
2
Muito obrigado você salvou o meu dia, trabalha no MacOS Catalina
afr
Quando executo o comando mongod, obtenho: “mongod” não pode ser aberto porque o desenvolvedor não pode ser verificado.
Raz
@Raz: Eu acho que isso está relacionado apple.stackexchange.com/questions/362883/…
Marnix Harderwijk
7

Kevinadi já fez justiça à pergunta, no entanto, foi assim que resolvi o problema:

Após instalar o mongodb-community

  1. sudo mkdir -p /System/Volumes/Data/data/db (Crie a pasta data / db)
  2. sudo chown -Rid -un/System/Volumes/Data/data/db ( permissões)
  3. mongod --dbpath=/System/Volumes/Data/data/db (Alterar dbpath do mongodb)
  4. mongod (Corre bem)

Encontrei este artigo sobre a instalação do mongodb muito útil

Tolumida
fonte
Isso ajudou após 1 dia tentando resolver o problema! O artigo não menciona a alteração do dbpath e é isso que eu estava perdendo
mhlavacka
1

encontrou um truque ... exclua a pasta inteira ~ / data / db do diretório e recrie uma nova, mas NÃO USE mkdir -p / data / db em vez disso, basta usar o trackpad para usar a maneira do sistema de criar pastas

isso funcionou para mim

Tianyu Cao
fonte
Não funcionou :-(
Mo.
1

Aqui está o que funcionou para mim:

  1. Crie uma pasta em algum lugar, por exemplo, Development / mongodb / data / db
  2. Abra o arquivo mongod.conf e atualize o valor storage.dbPath para o caminho da pasta recém-criado
rolu
fonte
11
Onde está o arquivo mongod.conf?
ValRob 3/19/19
2
É o arquivo padrão. Vá para este link: docs.mongodb.com/manual/reference/configuration-options e depois em "Arquivo de Configuração"
Rolu
0

Versão Mac Catalina fez a pasta raiz não é mais gravável.

O Brew possui uma versão atualizada do mongodb para usar um novo caminho (que ele próprio cria), /usr/local/var/mongodbe seguir estas instruções corrigirá o problema:

Guia para instalar o mongodb-community-edition atualizado

brew install mongodb-community@VERSION onde a primeira versão com a correção é 4.2

RobKohr
fonte
O comando acima deve ser executado com o sudo. A configuração do dbPath será respeitada. Caso contrário, o mongo ainda será padronizado /data/dbindependentemente da configuração.
Matt Hagemann 10/04