Um erro bastante comum tem afetado muitos usuários do MongoDB, impedindo a conexão aos servidores de banco de dados. A causa desse problema pode estar relacionada a eventos recentes na MongoDB Inc., que deixaram usuários com servidores de banco de dados inativos. Ao tentar se conectar via o cliente mongosh, o servidor retorna a resposta padrão: “mongodb://127.0.0.1:27017/?directconnection=true&serverselectiontimeoutms=2000&appname=mongosh+2.1.1” mesmo quando há uma conexão local.
Neste caso, tanto o cliente quanto o servidor estão na mesma máquina. Assim, as chamadas do cliente para o servidor serão feitas via loopback. No entanto, no seu caso, pode ser outro servidor na rede.
O cliente ou a ferramenta mongosh gera uma solicitação e a envia para a porta do servidor, tentando estabelecer a conexão. Se for bem-sucedida, veremos a interface do MongoDB para interagir com o servidor; se falhar, veremos uma resposta de erro. As razões para isso podem variar bastante, desde o daemon não estar em execução até a indisponibilidade do servidor na rede. Todos os passos deste tutorial podem ser realizados em servidores na nuvem.
O daemon foi desativado
Primeiro, vamos verificar o funcionamento do daemon do MongoDB usando o gerenciador de serviços systemd. Se o seu sistema operacional usa um sistema diferente, adapte o comando de acordo com ele:
Como podemos ver na captura de tela, o serviço está desativado e não está funcionando. Vamos tentar iniciá-lo:
Em seguida, vamos verificar o estado do serviço em execução no sistema para identificar possíveis erros:
Ótimo, o serviço foi iniciado. Podemos confirmar isso pelas linhas "job for unit finished successfully". No entanto, o problema nem sempre é apenas um daemon não iniciado. Um erro de configuração do MongoDB também é bastante comum.
Erro de conexão e configuração
Ao conectar-se ao servidor, verifique se a sua solicitação está correta. No erro descrito anteriormente, há a entrada: mongodb://127.0.0.1:27017/?directconnection=true, Isso indica uma conexão com um servidor local. Se você deseja usar um servidor remoto, utilize a seguinte sintaxe: mongodb://meuusuario:minhasenha@123.456.789.0:27017/meubanco. Obviamente, substitua meuusuario, minhasenha, 123.456.789.0 e meubanco pelos valores corretos para conectar-se corretamente.
Se isso não funcionar, verifique a disponibilidade da rede do seu servidor na porta onde ele deve estar escutando conexões. Você pode fazer isso com uma ferramenta específica. Caso não tenha uma instalada, use o seguinte comando para instalá-la:
Agora, vamos verificar a conexão:
No nosso servidor, o serviço está em execução, então há uma resposta. No seu caso, pode ser diferente. Se a porta estiver fechada, edite o arquivo de configuração do MongoDB:
Certifique-se de que as configurações de rede atendem às suas necessidades e que o servidor está escutando na porta e no endereço corretos. Caso contrário, altere os dados, salve o arquivo usando Ctrl + O e reinicie o serviço!
O usuário do sistema não tem permissões
O MongoDB cria um serviço e um usuário específicos e define no sistema que ele será executado sob esse usuário. Isso limita os direitos do software apenas aos necessários, além de controlar o acesso aos arquivos do banco de dados. Para verificar se o arquivo de configuração pertence ao usuário correto na pasta de armazenamento, use o comando:
À esquerda, podemos ver as permissões de acesso para três grupos. O dono do arquivo pode escrever e ler, enquanto outros grupos podem apenas ler. Neste caso, o proprietário é o root, o que é aceitável. O mais importante é garantir que a categoria "outros", na qual o MongoDB está incluído, tenha acesso de leitura ou seja o proprietário com permissões adequadas. Para conceder permissões, use o comando:
Após isso, teste a conexão novamente e reinicie o daemon do MongoDB!
Compreender as causas desse erro e utilizar as ferramentas corretas para diagnosticar e corrigir o problema permitirá restaurar com sucesso o funcionamento do MongoDB e resolver falhas de conectividade com o servidor do banco de dados.