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:
- A tradução do nome do servidor em endereço IP, quando a configuração usa um nome.
- A abertura da conexão TCP com a porta do MySQL.
- A identificação, em que o MySQL confere o usuário, a senha e o computador de origem.
- 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.