Solucionar problemas de conectividade no Banco de Dados do Azure para MySQL - Servidor Flexível
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 de conectividade comuns
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 do Banco de Dados do Azure para Servidor Flexível 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 do banco de dados está afetando um único dispositivo cliente ou vários dispositivos cliente. Se os erros estiverem afetando apenas um dos vários clientes, é provável que o problema seja 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 com a rede no meio.
Certifique-se de considerar também o potencial de sobrecarga de carga de trabalho, especialmente se um aplicativo abrir uma onda de conexões em um curto período de tempo. 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.).
Erro do lado do cliente 2.005 códigos
Notas de referência rápida para alguns códigos de erro do lado do cliente 2.005 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 do Banco de Dados do Azure para Servidor Flexível 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 do Banco de Dados do Azure para Servidor Flexível 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.).
Erro do lado do cliente 2.003 códigos
Notas de referência rápida para alguns códigos de erro do lado do cliente 2.003 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 pelo lado do cliente. |
(110) "ETIMEDOUT - Tempo limite de ligação excedido" | Houve um tempo limite de conexã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 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
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 "o anfitrião "1.2.3.4" está bloqueado devido a muitos erros de ligaçã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 usuário administrador do banco de dados precisa ser executado 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 Servidor Flexível MySQL.