Solucionar problemas de conectividade no Banco de Dados do Azure para MySQL - Servidor Flexível

APLICA-SE A:Banco de Dados do Azure para MySQL – Servidor Único Banco de Dados do Azure para MySQL – Servidor Flexível

Importante

O Banco de Dados do Azure para servidor único MySQL está no caminho de desativação. É altamente recomendável que você atualize para o Banco de Dados do Azure para o servidor flexível MySQL. Para obter mais informações sobre como migrar para o Banco de Dados do Azure para o servidor flexível MySQL, consulte O que está acontecendo com o Banco de Dados do Azure para Servidor Único MySQL?

O MySQL Community Edition gerencia conexões usando um thread por conexão. Como resultado, cada conexão de usuário obtém um thread de sistema operacional dedicado no processo mysqld.

Há possíveis problemas associados a esse tipo de tratamento de conexão. Por exemplo, o uso de memória será relativamente alto se houver um grande número de conexões de usuário, mesmo que sejam conexões ociosas. Além disso, há um nível mais alto de contenção interna do servidor e sobrecarga de alternância de contexto ao trabalhar com milhares de conexões de usuário.

Diagnóstico de erros comuns de conectividade

Sempre que sua instância do Banco de Dados do Azure para servidor flexível MySQL estiver enfrentando problemas de conectividade, lembre-se de que podem existir problemas em qualquer uma das três camadas envolvidas: o dispositivo cliente, a rede ou sua instância de servidor flexível do Banco de Dados do Azure para MySQL.

Dessa forma, sempre que você estiver diagnosticando erros de conectividade, considere os detalhes completos do:

  • Cliente, incluindo:
    • Configuração (local, VM do Azure etc. ou um computador DBA).
    • Sistema operacional.
    • Software e versões.
  • Cadeia de conexão e todos os parâmetros incluídos.
  • Topologia de rede (mesma região? mesma AZ? regras de firewall? roteamento).
  • Pool de conexões (parâmetros e configuração), se um estiver em uso.

Também é importante determinar se o problema de conectividade do banco de dados está afetando um único dispositivo cliente ou vários. Se os erros estiverem afetando apenas um dos vários clientes, é provável que o problema esteja com esse cliente. No entanto, se todos os clientes estiverem enfrentando o mesmo erro, é mais provável que o problema esteja no lado do servidor de banco de dados ou na rede entre eles.

Considere também o potencial de sobrecarga da carga de trabalho, especialmente se um aplicativo abrir uma sobretensão de conexões em um período muito curto de tempo. Você pode usar métricas como "Conexões Totais", "Conexões Ativas" e "Conexões Anuladas" para investigar isso.

Ao estabelecer a conectividade de um dispositivo ou aplicativo cliente, a primeira chamada importante no mysql é getaddrinfo, que executa a tradução do DNS do ponto de extremidade fornecido para um endereço IP. Se o endereço falhar, o MySQL mostrará uma mensagem de erro como "ERRO 2005 (HY000): Host do servidor MySQL desconhecido 'mysql-example.mysql.database.azure.com' (11)" e o número no final (11, 110 etc.).

Códigos de erro do lado do cliente 2005

Notas de referência rápidas para alguns códigos de erro do lado do cliente 2005 aparecem na tabela a seguir.

Código ERRO 2005 Observações
(11) "EAI_SYSTEM - erro do sistema" Há um erro na resolução DNS no lado do cliente. Não é um problema de servidor flexível do Banco de Dados do Azure para MySQL. Use dig/nslookup no cliente para solucionar problemas.
(110) "ETIMEDOUT - A conexão atingiu o tempo limite" O tempo limite foi atingido durante a conexão com o servidor DNS do cliente. Não é um problema de servidor flexível do Banco de Dados do Azure para MySQL. Use dig/nslookup no cliente para solucionar problemas.
(0) "nome desconhecido" O nome especificado não pode ser resolvido pelo DNS. Verifique a entrada no cliente. Isso provavelmente não é um problema com o Banco de Dados do Azure para servidor flexível MySQL.

A segunda chamada no mysql é com conectividade de soquete e ao olhar para uma mensagem de erro como "ERRO 2003 (HY000): Não é possível se conectar ao Banco de Dados do Azure para servidor flexível MySQL em 'mysql-example.mysql.database.azure.com' (111)", o número no final (99, 110, 111, 113, etc.).

Códigos de erro do lado do cliente 2003

Notas de referência rápidas para alguns códigos de erro do lado do cliente 2003 aparecem na tabela a seguir.

Código ERRO 2003 Observações
(99) "EADDRNOTAVAIL - Não é possível atribuir o endereço solicitado" Esse erro não é causado pelo servidor flexível do Banco de Dados do Azure para MySQL, mas sim no lado do cliente.
(110) "ETIMEDOUT - A conexão atingiu o tempo limite" O tempo limite foi atingido durante a conexão com o endereço IP fornecido. Provavelmente devido a um problema de segurança (regras de firewall) ou de rede (roteamento). Normalmente, isso não é um problema com o servidor flexível do Banco de Dados do Azure para MySQL. Use nc/telnet/TCPtraceroute no dispositivo cliente para solucionar problemas.
(111) "ECONNREFUSED - Conexão recusada" Embora os pacotes tenham atingido o servidor de destino, o servidor rejeitou a conexão. Isso pode ser uma tentativa de se conectar ao servidor errado ou à porta errada. Isso também pode estar relacionado ao serviço de destino (Banco de Dados do Azure para servidor flexível MySQL) estar inativo, se recuperar de failover ou passar por recuperação de falhas e ainda não aceitar conexões. Esse problema pode estar no lado do cliente ou do servidor. Use nc/telnet/TCPtraceroute no dispositivo cliente para solucionar problemas.
(113) "EHOSTUNREACH - Host inacessível" A tabela de roteamento do dispositivo cliente não inclui um caminho para a rede na qual o servidor de banco de dados está localizado. Verifique a configuração de rede do dispositivo cliente.

Outros códigos de erro

A tabela a seguir possui notas de referência rápida para outros códigos de erro relacionados a problemas que ocorrem depois que a conexão de rede com o servidor de banco de dados é estabelecida com êxito.

Código de ERRO Observações
ERRO 2013 "Conexão perdida com o MySQL Server" A conexão foi estabelecida, mas foi perdida em seguida. Isso pode acontecer se uma conexão for tentada em algo diferente do MySQL (como usar um cliente MySQL para se conectar ao SSH na porta 22, por exemplo). Isso também pode acontecer se o superusuário encerrar a sessão. Isso também pode acontecer se o banco de dados atingir o tempo limite da sessão. Ou pode se referir a problemas no servidor de banco de dados, depois que a conexão for estabelecida. Isso pode acontecer a qualquer momento durante o tempo de vida da conexão do cliente. Pode indicar que o banco de dados teve um problema sério.
ERRO 1040 "Número excessivo de conexões" O número de clientes conectados no banco de dados atingiu o limite configurado. É necessário avaliar por que tantas conexões são estabelecidas no banco de dados.
ERRO 1045 "Acesso negado ao usuário" O cliente forneceu um nome de usuário ou senha incorreto, portanto, o banco de dados negou acesso.
ERRO 2006 "O servidor MySQL desapareceu" Semelhante à entrada ERRO 2013 "Conexão perdida com o MySQL Server" na tabela anterior.
ERRO 1317 "A execução da consulta foi interrompida" Erro recebido pelo cliente quando o usuário primário interrompe a consulta, não a conexão.
ERRO 1129 "O host '1.2.3.4' está bloqueado devido a um excesso de erros de conexão" Desbloquear com 'mysqladmin flush-hosts'" - Todos os clientes em um único computador serão bloqueados se um cliente desse computador tentar usar o protocolo errado para se conectar ao MySQL várias vezes (a rede virtual à porta MySQL é um exemplo). Como diz a mensagem de erro, o usuário administrador do banco de dados precisa executar FLUSH HOSTS; para resolver o problema.

Observação

Para obter mais informações sobre erros de conectividade, consulte a postagem do blog Investigando problemas de conexão com o Banco de Dados do Azure para servidor flexível MySQL.

Próximas etapas

Para localizar respostas de pares às suas perguntas mais importantes ou publicar ou responder a uma pergunta, acesse o Stack Overflow.