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 servidor único do Banco de Dados do Azure para 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 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 recebe um thread dedicado do sistema operacional no processo mysqld.

Há possíveis problemas associados a esse tipo de tratamento de conexão. Por exemplo, o uso de memória é 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 comutação de contexto ao trabalhar com milhares de conexões de usuário.

Diagnosticar 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.

Como resultado, sempre que você estiver diagnosticando erros de conectividade, certifique-se de considerar todos os detalhes do:

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

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

Não se esqueça de verificar também o potencial de sobrecarga da carga de trabalho, especialmente se uma aplicação abrir um pico de ligações num período muito curto. Você pode usar métricas como "Total de conexões", "Conexões ativas" e "Conexões abortadas" para investigar isso.

Quando você estabelece conectividade a partir de um dispositivo cliente ou aplicativo, a primeira chamada importante no mysql é para getaddrinfo, que executa a tradução de DNS do ponto de extremidade fornecido para um endereço IP. Se a obtenção do endereço falhar, o MySQL mostra uma mensagem de erro como "ERROR 2005 (HY000): Unknown MySQL server host 'mysql-example.mysql.database.azure.com' (11)" e o número no final (11, 110, etc.).

Códigos de erro 2005 do lado do cliente

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

ERRO 2005 código Notas
(11) "EAI_SYSTEM - erro de sistema" Há um erro na resolução de DNS no lado do cliente. Não é um problema de servidor flexível do Banco de Dados do Azure para MySQL. Utilize dig/nslookup no cliente para resolver o problema.
(110) "ETIMEDOUT - Tempo limite de ligação excedido" Havia um tempo limite de ligação ao servidor DNS do cliente. Não é um problema de servidor flexível do Banco de Dados do Azure para MySQL. Utilize dig/nslookup no cliente para resolver o problema.
(0) "nome desconhecido" O nome especificado não foi resolvido pelo DNS. Verifique a entrada no cliente. Isso provavelmente não é um problema com o Banco de Dados do Azure para o servidor flexível MySQL.

A segunda chamada no mysql é com conectividade de soquete e ao olhar para uma mensagem de erro como "ERROR 2003 (HY000): Can't connect to Azure Database for MySQL flexible server on '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ápida para alguns códigos de erro 2003 do lado do cliente aparecem na tabela a seguir.

ERRO 2003 código Notas
(99) "EADDRNOTAVAIL - Não é possível atribuir o endereço pedido" Este erro não é causado pelo Banco de Dados do Azure para servidor flexível MySQL, mas sim no lado do cliente.
(110) "ETIMEDOUT - Tempo limite de ligação excedido" Havia um tempo limite de ligação com o endereço IP fornecido. Provavelmente um problema de segurança (regras de firewall) ou de rede (itinerário). Normalmente, isso não é um problema com o Banco de Dados do Azure para o servidor flexível MySQL. Utilize nc/telnet/TCPtraceroute no dispositivo cliente para resolver o problema.
(111) "ECONNREFUSED - Ligação recusada" Enquanto os pacotes chegavam ao servidor de destino, o servidor rejeitava a ligação. Isto pode ser uma tentativa de ligação 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. Este problema pode estar no lado do cliente ou no lado do servidor. Utilize nc/telnet/TCPtraceroute no dispositivo cliente para resolver o problema.
(113) "EHOSTUNREACH - Anfitrião inacessível" A tabela de itinerários do dispositivo cliente não inclui um caminho para a rede na qual o servidor da base de dados está localizado. Verifique a configuração de rede do dispositivo cliente.

Outros códigos de erro

Notas de referência rápida para alguns outros códigos de erro relacionados com problemas que ocorrem depois de a ligação de rede com o servidor da base de dados ser estabelecida com êxito aparecem na tabela a seguir.

Código de Erro Notas
ERRO 2013 "Ligação perdida ao servidor MySQL" A ligação foi estabelecida, mas perdeu-se depois. Isto pode acontecer se uma ligação for tentada em algo que não seja o MySQL (como utilizar um cliente MySQL para se ligar ao SSH na porta 22, por exemplo). Também pode acontecer se o superutilizador terminar a sessão. Isto também pode acontecer se a sessão da base de dados exceder o tempo limite. Ou pode referir-se a problemas no servidor da base de dados depois de a ligação ser estabelecida. Isto pode acontecer em qualquer altura durante a vida útil da ligação do cliente. Pode indicar que a base de dados teve um problema grave.
ERRO 1040 "Demasiadas ligações" O número de clientes da base de dados ligados já atingiu o número máximo configurado. Necessidade de avaliar porque é que tantas ligações são estabelecidas à base de dados.
ERRO 1045 "Acesso negado ao utilizador" O cliente forneceu um nome de utilizador ou palavra-passe incorretos; portanto, a base de dados negou o acesso.
ERRO 2006 "O servidor MySQL desapareceu" Semelhante à entrada ERRO 2013 "Ligação perdida ao servidor MySQL" na tabela anterior.
ERRO 1317 "A execução da consulta foi interrompida" Erro que o cliente recebe quando o utilizador principal interrompe a consulta, não a ligação.
ERRO 1129 "Host '1.2.3.4' está bloqueado devido a muitos erros de conexão" Desbloqueie com 'mysqladmin flush-hosts'" - todos os clientes em uma única máquina serão bloqueados se um cliente dessa máquina tentar várias vezes usar o protocolo errado para se conectar com o MySQL (telnetting para a porta MySQL é um exemplo). Como diz a mensagem de erro, o utilizador administrador da base de dados tem de executar FLUSH HOSTS; para resolver o problema.

Nota

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 o servidor flexível MySQL.

Próximos passos

Para encontrar respostas de colegas para suas perguntas mais importantes ou para postar ou responder a uma pergunta, visite Stack Overflow.