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 ÚnicoBanco de Dados do Azure para MySQL – Servidor Flexível
Importante
O servidor único do Banco de Dados do Azure para MySQL está no caminho da desativação. É altamente recomendável que você atualize para o servidor flexível do Banco de Dados do Azure para MySQL. Para obter mais informações sobre a migração para o servidor flexível do Banco de Dados do Azure para MySQL, confira O que está acontecendo com o Servidor Único do Banco de Dados do Azure para 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 Servidor Flexível do Banco de Dados do Azure para 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 a instância do 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 do 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 do 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 Servidor Flexível do Banco de Dados do Azure para MySQL. |
A segunda chamada no mysql é com conectividade de soquete e ao examinar uma mensagem de erro como "ERRO 2003 (HY000): Não é possível se conectar ao Servidor Flexível do Banco de Dados do Azure para 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 está 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, esse 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 (Servidor Flexível do Banco de Dados do Azure para MySQL) estar inativo, se recuperar do failover ou passar por recuperação de falha 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 no blog Investigando problemas de conexão com o Servidor Flexível do Banco de Dados do Azure para 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.