Solução de problemas de conexão
Nesta página
- Erro de conexão
- Verifique a connection string
- Configurar firewall
- Erro de autenticação
- Verifique a connection string
- Verificar o mecanismo de autenticação
- Verificar se o usuário está no banco de dados de autenticação
- Erro ao enviar mensagem
- Verifique a connection string
- Verificar o mecanismo de autenticação
- Verificar se o usuário está no banco de dados de autenticação
- Configurar firewall
- Verifique o número de conexões
- Erro de tempo limite
- Definir opção de tempo limite
- Verifique o número de conexões
Esta página oferece soluções potenciais para problemas que você pode encontrar ao usar o MongoDB Driver Go para se conectar a um sistema do MongoDB.
Observação
Esta página aborda apenas problemas de conexão. Se você encontrar qualquer outro problema com o MongoDB ou com o driver, acesse os seguintes recursos:
As Perguntas frequentes (FAQ) para o driver Go
A página Problemas e ajuda, que contém informações sobre como reportar bugs, contribuir com o driver e encontrar recursos adicionais
Os fóruns da MongoDB Community para perguntas, discussões ou suporte técnico geral
Erro de conexão
A seguinte mensagem de erro é uma mensagem geral indicando que o driver não pode se conectar a um servidor no nome de host especificado ou porta:
Error: couldn't connect to server 127.0.0.1:27017
As seções a seguir descrevem métodos que podem ajudar a resolver o problema.
Verifique a connection string
Verifique se o nome do host e o número da porta na connection string estão corretos. Na mensagem de erro de amostra, o nome do host é 127.0.0.1
e a porta é 27017
. O valor de porta padrão para uma instância do MongoDB é 27017
, mas você pode configurar o MongoDB para se comunicar em outra porta.
Configurar firewall
Supondo que o sistema do MongoDB use a porta padrão, verifique se a porta 27017
está aberta no firewall. Se seu sistema usar uma porta diferente, verifique se a porta correta está aberta no firewall.
Aviso
Não abra uma porta no firewall, a menos que tenha certeza de que é a porta usada pela instância do MongoDB.
Erro de autenticação
O driver Go pode falhar ao conectar a uma instância do MongoDB se a autorização não estiver configurada corretamente. Nesses casos, o driver levanta uma mensagem de erro semelhante a uma das seguintes mensagens:
Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' on server localhost:27017.
connection() error occurred during connection handshake: auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-256": (AuthenticationFailed) Authentication failed.
As seções a seguir descrevem métodos que podem ajudar a resolver o problema.
Verifique a connection string
Uma connection string inválida é a causa mais comum de problemas de autenticação ao tentar se conectar ao MongoDB.
Dica
Para obter mais informações sobre connection strings, consulte URI de conexão no Guia de conexão.
Se sua connection string contiver um nome de usuário e senha, certifique-se de que eles estejam no formato correto.
Observação
Se o nome de usuário ou senha incluir qualquer um dos seguintes caracteres, eles devem usar codificação percentual:
: / ? # [ ] @
Ao conectar a um conjunto de réplicas, inclua todos os hosts do conjunto de réplicas em sua connection string. Separe cada um dos hosts na connection string com uma vírgula. Isto permite ao condutor estabelecer uma conexão se um dos hosts não estiver acessível.
Verificar o mecanismo de autenticação
Verifique se as credenciais e o mecanismo de autenticação estão corretos. Você pode armazenar suas credenciais de autenticação em variáveis de ambiente ou pode passá-las para o método SetAuth()
.
Para saber mais sobre autenticação, consulte o guia Mecanismos de autenticação.
Verificar se o usuário está no banco de dados de autenticação
Para autenticar uma conexão corretamente usando um nome de usuário e uma senha de banco de dados de dados, o nome de usuário deve ser definido no banco de banco de dados de autenticação. O banco de dados de autenticação padrão é o banco de dados de banco de dados admin
. Para usar outro banco de dados de dados de autenticação, especifique o authSource
na string de conexão. O exemplo abaixo orienta o driver a usar o users
como banco de banco de dados de autenticação:
uri := "mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=users" client := mongo.Connect(context.TODO(), uri)
Erro ao enviar mensagem
Quando o driver não envia um comando após você fazer uma solicitação, ele geralmente exibe a seguinte mensagem de erro geral:
com.mongodb.MongoSocketWriteException: Exception sending message
As seções a seguir descrevem métodos que podem ajudar a resolver o problema.
Verifique a connection string
Verifique se a string de conexão em seu aplicativo está correta. Para obter mais informações sobre como verificar sua string de conexão, consulte Erro de conexão e Erro de autenticação.
Verificar o mecanismo de autenticação
Verifique se você está usando o mecanismo de autenticação e as credenciais corretas. Para obter mais informações sobre erros de autenticação, consulte Erro de autenticação.
Verificar se o usuário está no banco de dados de autenticação
Verifique se o usuário está no banco de dados de autenticação correto. Para obter mais informações sobre o banco de dados de autenticação, consulte Erro de autenticação.
Configurar firewall
O firewall deve ter uma porta aberta para se comunicar com a instância do MongoDB. Para obter mais informações sobre como configurar o firewall, consulte Erro de conexão.
Verifique o número de conexões
Cada instância do Client
aceita um número máximo de conexões abertas simultâneas em seu pool de conexões. O parâmetro de configuração maxPoolSize
define este valor e é configurado para 100
por padrão. Se já houver uma série de conexões abertas iguais a maxPoolSize
, o servidor aguardará até que uma conexão se torne disponível. Se esse tempo de espera exceder o valor de maxIdleTimeMS
, o driver responderá com um erro. Para obter mais informações sobre como o pool de conexões funciona, consulte Como funciona o pool de conexões no Driver Go?, nas Perguntas frequentes.
Erro de tempo limite
Às vezes, ao enviar uma solicitação pelo driver para o servidor, a solicitação expira. Se isso acontecer, você pode receber uma mensagem de erro semelhante à seguinte:
timed out while checking out a connection from connection pool: context canceled
Se você receber esse erro, tente os métodos a seguir para resolver o problema.
Definir opção de tempo limite
O Client
aceita uma única opção Timeout
que controla a quantidade de tempo que uma única operação pode levar para ser executada. Configure este valor utilizando o método SetTimeout()
ou especificando a opção timeoutMS
em sua connection string.
O exemplo a seguir define o valor de tempo limite único para 5 segundos usando a opção de connection string:
uri := "mongodb://<db_username>:<db_password>@<hostname>:27017/?timeoutMS=5000" client := mongo.Connect(context.TODO(), uri)
Verifique o número de conexões
O número de conexões com o servidor pode exceder maxPoolSize
. Para obter mais informações sobre como conferir o número de conexões, consulte Erro ao enviar mensagem.