FolioPierEstudos de TI

A conexão com o banco e o que cada erro significa

Nota 4 de 41 · 5 min de leitura
Nesta página
  1. As etapas da conexão
  2. Os erros de cada etapa
  3. Onde o servidor escuta
  4. A conta: usuário e origem

Antes de consultar ou gravar dados, o sistema precisa abrir uma conexão com o MySQL. A mensagem de erro indica em qual etapa a conexão falhou, e cada etapa aponta para uma verificação diferente. Uma mesma mensagem, porém, pode ter mais de uma causa, e o código do erro orienta a próxima verificação sem confirmar a causa sozinho.

As etapas da conexão

A conexão usa cinco informações: o endereço do servidor, a porta, o usuário, a senha e o banco. O endereço pode ser um nome ou um número IP. A porta padrão do MySQL é a 3306, embora uma instalação possa usar outra. A conexão passa por quatro etapas:

  1. A tradução do nome do servidor em endereço IP, quando a configuração usa um nome.
  2. A abertura da conexão TCP com a porta do MySQL.
  3. A identificação, em que o MySQL confere o usuário, a senha e o computador de origem.
  4. A escolha do banco que será usado.

Os erros de cada etapa

As mensagens de erro do MySQL trazem um código numérico, e cada código corresponde a uma situação:

  • Servidor desconhecido, código 2005: o computador não conseguiu traduzir o nome do servidor em endereço. A verificação começa pelo nome configurado e pela tradução de nomes.
  • Não foi possível conectar, código 2003, com o detalhe 10061: a tentativa de conexão TCP foi recusada. Nenhum serviço escuta naquele endereço e naquela porta, ou um firewall rejeitou a conexão.
  • Não foi possível conectar, código 2003, com o detalhe 10060: a tentativa terminou por tempo esgotado, sem resposta. As hipóteses são um endereço errado, um computador desligado e um firewall que descarta a conexão.
  • Acesso negado, código 1045: o MySQL recusou a identificação. A verificação envolve o usuário, a senha e a conta que corresponde ao computador de origem. O código não prova, sozinho, que a senha foi digitada errada.
  • Computador não autorizado, código 1130: o MySQL não tem nenhuma conta que aceite conexões vindas daquele computador.
  • Banco desconhecido, código 1049: o banco indicado não existe naquele servidor. A verificação envolve o nome do banco e o servidor de destino, principalmente depois de uma troca de servidor.
  • Conexão perdida, códigos 2006 e 2013: a comunicação caiu durante a conexão ou durante o uso. As causas incluem uma rede instável, o reinício do servidor, uma conexão parada que o servidor encerrou e o limite de tamanho dos pacotes.

Os números 10061 e 10060 são detalhes do Windows sobre a falha de rede. Por isso, a mensagem completa precisa ser preservada, porque o código 2003 sozinho informa menos do que o código acompanhado do detalhe.

Onde o servidor escuta

No arquivo de configuração do MySQL, que no Windows se chama my.ini, a opção bind-address define o endereço em que o servidor aceita conexões. Com o valor 127.0.0.1, apenas o próprio servidor consegue se conectar. A opção skip-networking desativa as conexões pela rede.

Dois testes ajudam a separar a rede do acesso ao banco:

  • netstat -ano | findstr :3306: executado no servidor, mostra se o MySQL está à espera de conexões e em qual endereço;
  • Test-NetConnection 192.168.1.10 -Port 3306: executado na estação, testa se a porta do servidor da loja aceita a conexão TCP.

Um teste de porta bem-sucedido confirma o acesso à porta naquele momento, mas não testa o usuário, a senha nem o banco.

A conta: usuário e origem

No MySQL, uma conta é formada pelo nome do usuário e pelo computador de origem, no formato 'usuario'@'origem'. Com o usuário sistema, alguns exemplos são:

  • 'sistema'@'localhost': aceita apenas as conexões feitas no próprio servidor;
  • 'sistema'@'192.168.1.%': aceita as conexões de qualquer computador da rede da loja;
  • 'sistema'@'%': aceita as conexões de qualquer origem.

O símbolo de porcentagem funciona como curinga e vale qualquer sequência de caracteres. A conta que aceita qualquer origem é a mais permissiva e não deve ser criada apenas para eliminar uma mensagem de erro.

Quando recebe uma conexão, o MySQL procura a conta que corresponde ao usuário e à origem, confere a senha e aplica as permissões dessa conta. Por isso, o sistema pode funcionar no próprio servidor e falhar nas estações, já que as duas tentativas podem ser atendidas por contas diferentes.

No suporte

Para os erros 2005 e 2003, a verificação começa pelo nome, pelo endereço e pela porta realmente usados. Para os erros 1045, 1130 e 1049, a verificação segue para as contas e para o banco no servidor que respondeu. Um erro devolvido pelo próprio MySQL já mostra que a comunicação com o servidor funcionou, e essa informação separa um problema de rede de um problema de acesso.

Para guardar

  • Os erros 2005 e 2003 acontecem antes de o MySQL responder: no nome, no endereço, na porta ou no caminho.
  • No erro 2003, o detalhe 10061 indica recusa, e o detalhe 10060 indica tempo esgotado.
  • Os erros 1045, 1130 e 1049 mostram que o MySQL respondeu e recusou a identificação, a origem ou o banco.
  • Uma conta do MySQL é formada pelo usuário e pela origem.
  • O teste de porta não testa o usuário, a senha nem o banco.
O sistema funciona no próprio servidor da loja, mas as estações recebem o erro 1130. O que verificar?

As contas do MySQL e as origens que cada uma aceita. Uma conta que aceita apenas o próprio servidor, como 'sistema'@'localhost', explica a diferença. As estações precisam de uma conta que aceite a rede da loja, como 'sistema'@'192.168.1.%', com as permissões necessárias.

O teste da porta 3306 funciona, mas o sistema recebe o erro 1045. Faz sentido continuar trocando cabos?

Não. O teste mostrou que a rede e o serviço funcionam, e o MySQL respondeu recusando a identificação. A investigação segue para o usuário, a senha e a conta que corresponde à origem da conexão.

Publicado a partir do Obsidian · FolioPier