Base de Conhecimento

Erro 2003 MySQL: Can't connect to server, como investigar

  • mysql, erro 2003, bind-address, conexão remota, ubuntu, sql
  • Usuários acharam útil: 0

Entenda o erro 2003 do MySQL, leia o número entre parênteses e investigue em ordem: serviço, endereço e porta de escuta e liberação do acesso remoto.

Por Redação Eleven Host · @robson.direitodigital · 31 de outubro de 2026 · 8 min de leitura

Arte da Eleven Host: janela de terminal com o título: Erro 2003 MySQL: Can't connect to server, como investigar

Capa da Redação Eleven Host para o guia: Erro 2003 MySQL: Can't connect to server, como investigar Arte: Eleven Host

O erro 2003 MySQL, Can't connect to MySQL server, diz que o cliente não conseguiu abrir a conexão TCP com o servidor no endereço e na porta indicados. O problema está antes do login: a conexão não chegou ao servidor.

Este guia mostra como ler a mensagem e o número entre parênteses, a diferença para o erro 2002, e três checagens em ordem: o MySQL está rodando, em qual endereço e porta ele escuta e, se for o caso, como liberar o acesso remoto com cuidado. No fim, explica por que o erro 1045 é outra história. Os fatos vêm do manual do MySQL 8.4 e da documentação do Ubuntu; os endereços dos exemplos são fictícios.

O que a mensagem diz

Na referência de erros de cliente do MySQL, o erro 2003 tem o símbolo CR_CONN_HOST_ERROR e esta mensagem:

Can't connect to MySQL server on '%s:%u' (%d)

Os campos são, nesta ordem, o servidor, a porta e um número, que é o código do sistema para o problema. Na tela, ela aparece assim, com um exemplo do próprio manual:

ERROR 2003: Can't connect to MySQL server on 'host_name' (111)

Dois pontos ajudam a ler:

  • Erro de cliente: a referência explica que as mensagens desse grupo nascem dentro da biblioteca cliente do MySQL, e não no servidor.
  • SQLSTATE HY000: para erros de cliente, a referência diz que o valor é HY000 (erro geral), então ele não ajuda a diferenciar um erro do outro.

O manual descreve o 2003 como uma conexão de rede recusada e manda checar três coisas: se há um servidor MySQL rodando, se ele aceita conexões de rede e se a porta que você usou é a configurada no servidor.

O número entre parênteses

O manual usa o 111 no exemplo. Esse número é o código de erro do sistema operacional. A página de manual do Ubuntu sobre errno define ECONNREFUSED como "Connection refused", ETIMEDOUT como "Connection timed out" e EHOSTUNREACH como "Host is unreachable". No Linux, esses nomes correspondem aos números 111, 110 e 113. Os números 110 e 113 são do Linux, e não da documentação do MySQL.

  • 111 (recusado): a máquina respondeu, mas nada escuta naquele endereço e porta. Pode ser o MySQL parado, a porta errada ou o MySQL ouvindo só em 127.0.0.1.
  • 110 (tempo esgotado): ninguém respondeu. É a leitura de um firewall que descarta o pedido ou de um endereço errado.
  • 113 (host inalcançável): o sistema não achou caminho até a máquina.

O erro 2003 quer dizer que a conexão não chegou ao MySQL. Se chegou e foi recusada por causa da conta, o erro é outro: o 1045.

Erro 2002 x erro 2003

Os dois começam com "Can't connect", mas a conexão é diferente. O 2002 tem o símbolo CR_CONNECTION_ERROR e a mensagem Can't connect to local MySQL server through socket '%s' (%d). Segundo o manual, o cliente usa um arquivo de socket Unix quando você não informa o host ou quando informa o nome especial localhost, e esse socket só serve para conexões na mesma máquina.

  • 2002: a conexão era local, por socket.
  • 2003: a conexão era por rede (TCP), com host ou IP e porta.

Se a sua mensagem fala em socket, o assunto é o 2002, que o guia Erro 2002 MySQL: não conecta ao servidor, como resolver detalha. Se ela traz um host e uma porta, siga os passos abaixo.

1º passo: o MySQL está rodando?

O manual do MySQL começa pela pergunta mais simples: há um processo chamado mysqld no servidor? Num Ubuntu, verifique o serviço:

sudo systemctl status mysql

Se o serviço estiver parado, não há servidor para aceitar a conexão. Para ligar o serviço e ver o que cada comando do systemctl faz, veja o guia systemctl: como iniciar, parar e ver serviços na VPS. O manual também sugere testar a porta de outra máquina com telnet some_host 3306: a resposta "Connection refused" indica que não há servidor rodando naquela porta.

2º passo: em qual endereço e porta ele escuta?

Com o serviço no ar, veja onde ele escuta. A porta padrão do MySQL é a 3306, e o cliente precisa usar a porta configurada no servidor (variável port). O comando ss lista os sockets TCP em escuta (-t TCP, -l só escutando, -n sem resolver nomes, -p mostra o processo):

sudo ss -tlnp | grep 3306

Leia a coluna do endereço local:

  • 127.0.0.1:3306: o MySQL aceita conexões só da própria máquina.
  • 0.0.0.0:3306 ou *:3306: ele escuta em todas as interfaces.

Duas configurações explicam um servidor que não aceita conexões de rede. A primeira é skip_networking: se o servidor foi iniciado com ela ligada, ele não aceita conexões TCP/IP de jeito nenhum. A segunda é o bind_address em 127.0.0.1, que faz o servidor escutar só na interface local e recusar conexões remotas.

No Ubuntu 24.04, o pacote mysql-server instala o MySQL 8.0, e não o 8.4. Segundo o repositório do pacote, o arquivo /etc/mysql/mysql.conf.d/mysqld.cnf vem com bind-address = 127.0.0.1. Assim, se o seu servidor é um Ubuntu 24.04 com o pacote padrão, o MySQL só aceita conexão da própria máquina até você mudar isso. O padrão do MySQL fora do pacote do Ubuntu é *, todas as interfaces.

Quer conhecer o banco de dados na nuvem 11SQL? 11SQL Mini a partir de R$ 9,90/mês; confira na loja o que cada plano inclui. Conhecer o 11SQL

3º passo: liberar o acesso remoto com cuidado

Se o seu objetivo é conectar de outra máquina, a documentação do Ubuntu manda trocar o bind-address pelo IP do servidor (o exemplo dela é bind-address = 192.168.0.5) e reiniciar o serviço:

sudo systemctl restart mysql.service

O bind_address aceita *, 0.0.0.0 (todas as interfaces IPv4), ::, um IP específico ou uma lista de IPs separados por vírgula, sem curingas. Com o firewall ajustado (veja logo abaixo), teste de outra máquina, com o IP do servidor:

mysql -h 203.0.113.10 -P 3306 -u usuario -p

Se um firewall bloquear a porta 3306, o manual manda verificar isso. Num Ubuntu com o ufw, esta regra libera a porta só para o IP de quem vai conectar, e o segundo comando confere as regras:

sudo ufw allow from 203.0.113.10 to any port 3306 proto tcp

sudo ufw status

Troque 203.0.113.10 pelo IP da máquina que vai se conectar.

Alerta de segurança

Liberar a 3306 sem limitar o endereço (ufw allow 3306/tcp) expõe o banco à internet inteira. A recomendação é liberar só o IP de quem precisa ou usar um túnel SSH. O manual faz um alerta parecido sobre a conta com host '%': use-a apenas para descobrir de onde você conecta e troque pelo host real depois, porque ela deixa aquele usuário conectar a partir de hosts não previstos.

A porta 33060 é do protocolo X (mysqlx), que é outro protocolo. O cliente mysql comum usa a 3306.

Quando a rede funciona: o erro 1045 é outra história

Depois que a conexão chega ao servidor, o erro muda. O exemplo do manual é ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO). Outra mensagem parecida é "Host ... is not allowed to connect to this MySQL server", que aparece quando a conta não tem permissão para o host de onde você conecta.

Resumindo pelas mensagens: o 2003 diz que a conexão não chegou ao servidor (rede, porta ou serviço), e o 1045 ou o "is not allowed to connect" dizem que chegou e a conta recusou. Para o acesso negado, veja o guia Erro 1045 MySQL: Access denied for user, como resolver. Para criar o usuário certo e dar a permissão, veja Criar usuário MySQL: como dar permissões com GRANT.

Checklist do erro 2003

  • Leia o número entre parênteses: 111 é conexão recusada, 110 é tempo esgotado e 113 é host inalcançável (números do Linux).
  • Confirme que a mensagem traz host e porta; se falar em socket, é o 2002.
  • Rode sudo systemctl status mysql e confira se o serviço está ativo.
  • Rode sudo ss -tlnp | grep 3306 e veja se o endereço é 127.0.0.1 ou 0.0.0.0.
  • Confira skip_networking e o bind-address em /etc/mysql/mysql.conf.d/mysqld.cnf.
  • Confira a porta usada pelo cliente (a padrão é 3306).
  • Libere a 3306 no firewall só para o IP de quem conecta.
  • Se o erro mudou para 1045, o problema agora é a conta.

Quer conhecer a VPS da Eleven Host? VPS a partir de R$ 17,00/mês no Plano Bronze; confira na loja o que cada plano inclui. Conhecer a VPS

Perguntas frequentes

O que significa o erro 2003 do MySQL?

Que o cliente não conseguiu abrir a conexão de rede com o servidor, no host e na porta da mensagem. É um erro de cliente, gerado na biblioteca cliente do MySQL.

Qual a diferença entre o erro 2002 e o 2003?

O 2002 acontece em conexão local por socket. O 2003 acontece em conexão por rede (TCP), com host ou IP e porta.

O que significa o número entre parênteses no erro 2003?

É o código de erro do sistema. O manual do MySQL usa o 111 no exemplo. No Linux, 111 é conexão recusada, 110 é tempo esgotado e 113 é host inalcançável.

Por que o MySQL do Ubuntu não aceita conexão remota?

No Ubuntu 24.04 com o pacote padrão, porque o arquivo de configuração do pacote traz bind-address = 127.0.0.1, que limita o MySQL a conexões da própria máquina. Troque pelo IP do servidor, reinicie o serviço e libere a porta só para quem precisa.

Esta resposta lhe foi útil?

Artigos Relacionados