Solucionar problemas de conexão para bancos de dados do Aurora MySQL e - Amazon Aurora

Solucionar problemas de conexão para bancos de dados do Aurora MySQL e

Garantir conectividade confiável entre as aplicações e a instância de banco de dados do RDS é essencial para o bom funcionamento das workloads. No entanto, problemas de conectividade podem surgir como consequência de vários fatores, como configurações de rede, problemas de autenticação ou restrições de recursos. Este guia tem como objetivo fornecer uma abordagem abrangente para solucionar problemas de conectividade com o Aurora MySQL e o .

Identificar problemas de conectividade de banco de dados do Aurora MySQL e

Identificar a categoria específica do problema de conectividade pode ajudar a reduzir as possíveis causas e orientar o processo de solução de problemas. Cada categoria pode exigir abordagens e técnicas diferentes para diagnóstico e solução. Os problemas de conectividade do banco de dados podem ser amplamente classificados nas categorias a seguir.

Erros e exceções de conexão

Erros e exceções de conexão podem ocorrer por vários motivos, como strings de conexão incorretas, falhas de autenticação, interrupções na rede ou problemas no servidor do banco de dados. As causas podem incluir parâmetros de conexão configurados incorretamente, credenciais inválidas, interrupções na rede, falhas ou reinicializações do servidor de banco de dados. Grupos de segurança configurados incorretamente, configurações de nuvem privada virtual (VPC), listas de controle de acesso (ACLs) de rede e tabelas de rotas associadas a sub-redes também podem causar problemas de conexão.

Limite de conexão atingido

Este problema ocorre quando o número de conexões simultâneas com o servidor de banco de dados excede o limite máximo permitido. Os servidores de banco de dados geralmente têm um limite máximo de conexão configurável definido pelo parâmetro max_connections nos clusters e nos grupos de parâmetros da instância. Quando um limite de conexão é aplicado, o servidor de banco de dados garante que ele tenha recursos suficientes (por exemplo, memória, CPU e identificadores de arquivos) para lidar com as conexões existentes de maneira eficiente e oferecer uma performance aceitável. As causas podem incluir vazamentos de conexão na aplicação, agrupamento ineficiente de conexões ou um aumento inesperado nas solicitações de conexão.

Tempos limite de conexão

Os tempos limite de conexão ocorrem quando a aplicação cliente não consegue estabelecer uma conexão com o servidor do banco de dados dentro de um período de tempo limite especificado. As causas comuns são problemas de rede, sobrecarga do servidor, regras de firewall e configurações de conexão configuradas incorretamente.

Tempos limite de inatividade da conexão

Conexões ociosas que permanecem inativas por um período prolongado podem ser fechadas automaticamente pelo servidor de banco de dados para conservar recursos. Esse tempo limite geralmente é configurável usando o wait_timeout e o interactive_timeout parameters, e deve ser ajustado com base nos padrões de uso da conexão da aplicação. As causas podem incluir a lógica da aplicação que deixa as conexões ociosas por longos períodos ou o gerenciamento inadequado da conexão.

Desconexão intermitente das conexões existentes

Esta classe de erros se refere a um cenário em que as conexões estabelecidas entre uma aplicação cliente e o banco de dados são encerradas ou desconectadas inesperadamente em intervalos irregulares, apesar de estarem ativas e em uso. Essas desconexões ocorrem de maneira intermitente, o que significa que acontecem em intervalos irregulares e não consistentes. As causas podem ser as seguintes:

  • Problemas do servidor de banco de dados, como reinicializações ou failovers

  • Processamento inadequado da conexão com a aplicação

  • Problemas de balanceamento de carga e de proxy

  • Instabilidade da rede

  • Problemas com componentes ou middleware de terceiros envolvidos no caminho da conexão

  • Tempos limite de execução da consulta

  • Restrições de recursos no lado do servidor ou do cliente

Identificar a causa raiz por meio de monitoramento, registro em log e análise abrangentes é crucial, enquanto a implementação de mecanismos adequados de tratamento de erros, agrupamento de conexões e novas tentativas pode ajudar a mitigar o impacto dessas desconexões intermitentes na funcionalidade e na experiência do usuário da aplicação.

Coletar dados sobre problemas de conectividade do Aurora MySQL e

A coleta de dados abrangentes relacionados aos componentes da aplicação, do banco de dados, da rede e da infraestrutura é essencial para solucionar com eficácia os problemas de conectividade entre uma aplicação e um banco de dados do Aurora MySQL ou . Ao coletar logs, configurações e informações de diagnóstico relevantes, é possível ter insights valiosos que podem ajudar a identificar a causa básica dos problemas de conectividade e orientar você para uma solução adequada.

Logs e configurações de rede, como regras de grupos de segurança, configurações de VPC e tabelas de rotas, são essenciais para identificar possíveis gargalos ou configurações incorretas relacionadas à rede que possam estar impedindo a aplicação de estabelecer uma conexão bem-sucedida com o banco de dados. Ao analisar esses componentes de rede, é possível garantir que as portas necessárias estejam abertas, os endereços IP sejam permitidos e as configurações de roteamento estejam definidas corretamente.

Timestamps

Registre os carimbos de data/hora exatos quando os problemas de conectividade ocorrerem. Isso pode ajudar a identificar padrões ou correlacionar os problemas com outros eventos ou atividades.

Logs de mecanismo de banco de dados

Além dos logs gerais de banco de dados, revise os logs do mecanismo de banco de dados (por exemplo, o log de erros do MySQL e o log de consultas lentas) em busca de informações ou erros relevantes que possam estar relacionados aos problemas intermitentes de conectividade. Para ter mais informações, consulte Registro em log de bancos de dados do Aurora MySQL.

Logs da aplicação cliente

Colete logs detalhados das aplicações cliente que se conectam ao banco de dados. Os logs da aplicação fornecem visibilidade das tentativas de conexão, dos erros e de qualquer informação relevante do ponto de vista da aplicação, o que pode revelar problemas relacionados às strings de conexão, às credenciais de autenticação ou ao tratamento da conexão no nível da aplicação.

Os logs do banco de dados, por outro lado, oferecem insights sobre erros do lado do banco de dados, consultas lentas ou eventos que podem estar contribuindo com os problemas de conectividade. Para ter mais informações, consulte Registro em log de bancos de dados do Aurora MySQL.

Variáveis do ambiente do cliente

Verifique se alguma variável de ambiente ou configuração no lado do cliente pode estar afetando a conexão do banco de dados, como configurações de proxy, configurações de SSL/TLS ou qualquer outra variável relevante.

Versões da biblioteca do cliente

Verifique se o cliente está usando as versões mais recentes de todos os drivers, bibliotecas ou frameworks de banco de dados usados para conectividade com o banco de dados. Versões desatualizadas podem ter problemas conhecidos ou problemas de compatibilidade.

Captura de rede do cliente

Realize uma captura de rede no lado do cliente usando uma ferramenta, como o Wireshark ou tcpdump, durante os momentos em que ocorrerem problemas de conectividade. Isso pode ajudar a identificar quaisquer problemas ou anomalias relacionados à rede no lado do cliente.

Topologia de rede do cliente

Entenda a topologia de rede do cliente, inclusive quaisquer firewalls, balanceadores de carga ou outros componentes, como RDS Proxy ou Proxy SQL, que estejam estabelecendo conexões com o banco de dados em vez de o cliente estabelecer conexões diretamente.

Configurações do sistema operacional do cliente

Verifique as configurações do sistema operacional do cliente que podem prejudicar a conectividade de rede, como regras de firewall, configurações do adaptador de rede e quaisquer outras configurações relevantes.

Configuração de agrupamento de conexões

Se você estiver usando um mecanismo de agrupamento de conexões na aplicação, revise as definições de configuração e monitore as métricas do grupo (por exemplo, conexões ativas, conexões ociosas e tempos limite de conexão) para garantir que o grupo esteja funcionando corretamente. Revise também as configurações do grupo, como os tamanhos mínimo e máximo e as configurações de validação da conexão, para garantir que estejam configuradas corretamente.

String de conexão

A string de conexão normalmente inclui parâmetros como nome do host ou endpoint, número da porta, nome do banco de dados e credenciais de autenticação. A análise da string de conexão pode ajudar a identificar possíveis configurações incorretas ou configurações inadequadas que possam estar causando problemas de conectividade. Por exemplo, um nome de host ou um número de porta incorreto pode impedir que o cliente acesse a instância do banco de dados. Já credenciais de autenticação inválidas podem causar falhas de autenticação e rejeições de conexão. Além disso, a string de conexão pode revelar problemas relacionados ao agrupamento de conexões, tempos limite ou outras configurações específicas da conexão que possam contribuir com problemas de conectividade. Fornecer a string de conexão completa usada pela aplicação cliente pode ajudar a identificar qualquer configuração incorreta no cliente.

Métricas de banco de dados

Monitore métricas de banco de dados, como uso de CPU, uso de memória e E/S de disco, durante os momentos em que ocorrerem problemas de conectividade. Isso pode ajudar a identificar se a instância de banco de dados está enfrentando problemas de desempenho ou de contenção de recursos.

DB engine version (Versão do mecanismo de banco de dados)

Observe a versão do mecanismo de banco de dados do Aurora MySQL e . A AWS lança regularmente atualizações que abordam problemas conhecidos, vulnerabilidades de segurança e introduzem aprimoramentos de desempenho. Portanto, é altamente recomendável que você atualize para as versões mais recentes disponíveis, pois essas atualizações geralmente incluem correções de erros e melhorias relacionadas especificamente à conectividade, ao desempenho e à estabilidade. Fornecer as informações da versão do banco de dados, junto com os outros detalhes coletados, pode ajudar a Suporte a diagnosticar e resolver problemas de conectividade com eficiência.

Métricas de rede

Colete métricas de rede, como latência, perda de pacotes e throughput, durante os momentos em que ocorrerem problemas de conectividade. Ferramentas como ping, traceroute e ferramentas de monitoramento de rede podem ajudar a coletar esses dados.

Detalhes da origem e do cliente

Determine os endereços IP dos servidores de aplicações, balanceadores de carga ou quaisquer outros componentes que estejam iniciando as conexões do banco de dados. Isso pode ser um único endereço IP ou um intervalo de endereços IP (notação CIDR). Se a origem for uma instância do Amazon EC2, também é útil analisar o tipo de instância, a zona de disponibilidade, o ID da sub-rede e os grupos de segurança associados à instância, além dos detalhes da interface de rede, como endereço IP privado e endereço IP público.

Ao analisar minuciosamente os dados coletados, é possível identificar configurações incorretas, restrições de recursos, interrupções na rede ou outros problemas subjacentes que estejam causando problemas de conectividade intermitentes ou persistentes. Essas informações permitem que você realize ações específicas, como ajustar configurações, resolver problemas de rede ou lidar com o tratamento de conexões em nível de aplicação.

Monitorar conexões de banco de dados do Aurora MySQL e

Para monitorar e solucionar problemas de conectividade, use as métricas e os recursos a seguir.

Métricas do CloudWatch
  • CPUUtilization: o alto uso da CPU na instância de banco de dados pode levar à execução lenta de consultas, o que pode resultar em tempos limite de conexão ou rejeições.

  • DatabaseConnections: monitore o número de conexões ativas com a instância de banco de dados. Um número alto de conexões próximo ao máximo definido pode indicar possíveis problemas de conectividade ou esgotamento do grupo de conexões.

  • FreeableMemory: pouca memória disponível pode causar problemas de desempenho e conectividade devido a restrições de recursos.

  • NetworkReceiveThroughput e NetworkTransmitThroughput: picos ou quedas incomuns no throughput da rede podem indicar problemas de conectividade ou gargalos na rede.

Métricas do Performance Insights

Para solucionar problemas de conectividade no Aurora MySQL e usando o Insights de Performance, analise métricas de banco de dados, como as seguintes:

  • Aborted_clients

  • Aborted_connects

  • Conexões

  • max_connections

  • Threads_connected

  • Threads_created

  • Threads_running

Essas métricas podem ajudar na identificação de gargalos de conexão, detecção de problemas de rede ou de autenticação, otimização do agrupamento de conexões e na garantia do gerenciamento eficiente de threads. Para ter mais informações, consulte Contadores do Performance Insights para Aurora MySQL.

Recursos do Insights de Performance
  • Carga do banco de dados: visualize a carga do banco de dados ao longo do tempo e correlacione-a com problemas de conectividade ou degradação do desempenho.

  • Estatísticas SQL: analise as estatísticas SQL para identificar consultas ou operações de banco de dados ineficientes que possam contribuir com problemas de conectividade.

  • Principais consultas: identifique e analise as consultas que consomem mais recursos, o que pode ajudar a identificar possíveis gargalos de desempenho ou consultas de longa duração que possam estar causando problemas de conectividade.

Ao monitorar essas métricas e utilizar o Insights de Performance, você pode ter visibilidade do desempenho da instância do banco de dados, do uso de recursos e dos possíveis gargalos que possam estar causando problemas de conectividade. Por exemplo:

  • Um alto nível de DatabaseConnections próximo ao limite máximo pode indicar esgotamento do agrupamento de conexões ou tratamento inadequado da conexão, causando problemas de conectividade.

  • Alta CPUUtilization ou baixa FreeableMemory pode indicar restrições de recursos, o que pode causar lentidão na execução de consultas e tempos limite ou rejeições de conexão.

  • Analisar as Principais consultas e as Estatísticas SQL pode ajudar a identificar consultas ineficientes ou que consomem muitos recursos que possam estar contribuindo com os problemas de conectividade.

Além disso, o monitoramento do CloudWatch Logs e a configuração de alarmes podem ajudar você a identificar e responder proativamente aos problemas de conectividade antes que eles aumentem.

É importante observar que, embora essas métricas e ferramentas possam fornecer insights valiosos, elas devem ser usadas com outras etapas de solução de problemas. Ao analisar também as configurações de rede, as regras do grupo de segurança e o tratamento de conexões no nível da aplicação, é possível diagnosticar e resolver problemas de conectividade de forma abrangente com instâncias de banco de dados do Aurora MySQL e .

Monitoramento adicional do Aurora MySQL

Métricas do CloudWatch
  • AbortedClients: monitora o número de conexões de cliente que foram fechadas corretamente.

  • AuroraSlowConnectionHandleCount: monitora o número de operações lentas de controle de conexão, indicando possíveis problemas de conectividade ou gargalos de desempenho.

  • AuroraSlowHandshakeCount: mede o número de operações lentas de handshake, o que também pode ser um indicador de problemas de conectividade.

  • ConnectionAttempts: mede o número de tentativas de conexão feitas com a instância de banco de dados do Aurora MySQL.

Variáveis de status globais

Aurora_external_connection_count: mostra o número de conexões de banco de dados com a instância de banco de dados, excluindo as conexões de serviço do RDS usadas para verificações de integridade do banco de dados.

Ao monitorar essas métricas e variáveis de status global, é possível obter visibilidade dos padrões de conexão, dos erros e de possíveis gargalos que possam estar causando problemas de conectividade com sua instância do Amazon Aurora MySQL.

Por exemplo, um número alto de AbortedClients ou de AuroraSlowConnectionHandleCount pode indicar problemas de conectividade.

Além disso, a configuração de alarmes e de notificações do CloudWatch pode ajudar você a identificar e reagir proativamente aos problemas de conectividade antes que eles aumentem e prejudiquem o desempenho da aplicação.

Códigos de erro de conectividade do Aurora MySQL e

Veja a seguir alguns erros comuns de conectividade dos bancos de dados do Aurora MySQL e , além de códigos de erro e de explicações.

Código de erro 1040: muitas conexões

Este erro ocorre quando o cliente tenta estabelecer mais conexões do que o máximo permitido pelo servidor do banco de dados. As possíveis causas incluem:

  • Configuração incorreta do agrupamento de conexões: se estiver usando um mecanismo de agrupamento de conexões, garanta que o tamanho máximo do grupo não esteja definido como um valor muito alto e que as conexões estejam sendo liberadas adequadamente de volta ao grupo.

  • Configuração da instância do banco de dados: verifique a configuração máxima de conexões permitidas para a instância do banco de dados e ajuste-a, se necessário, definindo o parâmetro max_connections.

  • Alta simultaneidade: se vários clientes ou aplicações estiverem se conectando ao banco de dados simultaneamente, o limite máximo permitido de conexões poderá ser atingido.

Código de erro 1045: acesso negado para o usuário '...'@'...' (usando senha: SIM/NÃO)

Este erro indica uma falha de autenticação ao tentar se conectar ao banco de dados. As possíveis causas incluem:

  • Compatibilidade do plugin de autenticação: verifique se o plugin de autenticação usado pelo cliente é compatível com o mecanismo de autenticação do servidor de banco de dados.

  • Nome de usuário ou senha incorretos: verifique se o nome de usuário e a senha corretos estão sendo usados na string de conexão ou no mecanismo de autenticação.

  • Permissões do usuário: garanta que o usuário tenha as permissões necessárias para se conectar à instância do banco de dados a partir do host ou da rede especificada.

Código de erro 1049: banco de dados desconhecido '...'

Este erro indica que o cliente está tentando se conectar a um banco de dados que não existe no servidor. As possíveis causas incluem:

  • Banco de dados não criado: verifique se o banco de dados especificado foi criado no servidor de banco de dados.

  • Nome incorreto do banco de dados: verifique novamente a precisão do nome do banco de dados usado na string de conexão ou na consulta.

  • Permissões de usuário: verifique se o usuário tem as permissões necessárias para acessar o banco de dados especificado.

Código de erro 1153: um pacote maior que 'max_allowed_packet' bytes foi recebido

Este erro ocorre quando o cliente tenta enviar ou receber dados que excedem o tamanho máximo de pacote permitido pelo servidor do banco de dados. As possíveis causas incluem:

  • Consultas ou conjuntos de resultados grandes: se estiver realizando consultas que envolvam grandes quantidades de dados, o limite de tamanho do pacote pode ser excedido.

  • Configurações de tamanho de pacote mal configuradas: verifique a configuração max_allowed_packet no servidor do banco de dados e ajuste-a, se necessário.

  • Problemas de configuração de rede: garanta que a configuração da rede (por exemplo, tamanho da MTU) permita os tamanhos de pacotes necessários.

Código de erro 1226: o usuário '...' excedeu o recurso 'max_user_connections' (valor atual: ...)

Este erro indica que o usuário excedeu o número máximo de conexões simultâneas permitidas pelo servidor de banco de dados. As possíveis causas incluem:

  • Configuração incorreta do agrupamento de conexões: se estiver usando um mecanismo de agrupamento de conexões, garanta que o tamanho máximo do grupo não esteja definido como um valor muito alto para o limite de conexão do usuário.

  • Configuração da instância do banco de dados: verifique a configuração max_user_connections da instância do banco de dados e ajuste-a, se necessário.

  • Alta simultaneidade: se vários clientes ou aplicações estiverem se conectando ao banco de dados simultaneamente usando o mesmo usuário, o limite de conexão específico do usuário poderá ser atingido.

Código de erro 2003: não é possível se conectar ao servidor MySQL em '...' (10061)

Este erro geralmente ocorre quando o cliente não consegue estabelecer uma conexão TCP/IP com o servidor do banco de dados. Ele pode ser causado por vários motivos, incluindo:

  • Status da instância do banco de dados: verifique se a instância do banco de dados está no estado available e não esteja passando por nenhuma operação de manutenção ou backup.

  • Regras de firewall: verifique se algum firewall (do sistema operacional, da rede ou do grupo de segurança) está bloqueando a conexão na porta especificada (geralmente 3306 para MySQL).

  • Nome de host ou endpoint incorreto: verifique se o nome do host ou endpoint usado na cadeia de conexão está correto e corresponde à instância do banco de dados.

  • Problemas de conectividade de rede: verifique se a máquina cliente pode acessar a instância do banco de dados pela rede. Verifique se há interrupções na rede, problemas de roteamento ou configurações incorretas da VPC ou de sub-rede.

Código de erro 2005: host desconhecido do servidor MySQL '...' (11001)

Este erro ocorre quando o cliente não consegue enviar o nome do host ou o endpoint do servidor de banco de dados para um endereço IP. As possíveis causas incluem:

  • Problemas de resolução de DNS: verifique se a máquina cliente pode resolver o nome do host corretamente usando o DNS. Verifique as configurações de DNS, o cache DNS e tente usar o endereço IP em vez do nome do host.

  • Nome de host ou endpoint incorreto: verifique novamente a precisão do nome do host ou do endpoint usado na cadeia de conexão.

  • Problemas de configuração de rede: garanta que a configuração de rede do cliente (por exemplo, VPC, sub-rede e tabelas de rotas) permita a resolução de DNS e a conectividade com a instância do banco de dados.

Código de erro 2026: erro de conexão SSL

Este erro ocorre quando há um problema com a configuração de SSL/TLS ou com a validação do certificado durante a tentativa de conexão. As possíveis causas incluem:

  • Expiração do certificado: verifique se o certificado SSL/TLS usado pelo servidor expirou e precisa ser renovado.

  • Problemas de validação do certificado: verifique se o cliente é capaz de validar o certificado SSL/TLS do servidor corretamente e se o certificado é confiável.

  • Problemas de configuração de rede: verifique se a configuração de rede permite conexões SSL/TLS e não bloqueia ou interfere no processo de handshake SSL/TLS.

  • Incompatibilidade de configuração SSL/TLS: garanta que as configurações de SSL/TLS (por exemplo, conjuntos de cifras e versões de protocolo) no cliente e no servidor sejam compatíveis.

Ao entender as explicações detalhadas e as possíveis causas de cada código de erro, é possível solucionar melhor os problemas de conectividade ao trabalhar com bancos de dados do Aurora MySQL e .

Recomendações de ajuste de parâmetros do Aurora MySQL e

Conexões máximas

O ajuste desses parâmetros pode ajudar a evitar problemas de conexão causados por atingir o limite máximo permitido de conexões. Esses valores devem ser definidos adequadamente com base nos requisitos de simultaneidade e nas restrições de recursos da sua aplicação.

  • max_connections: este parâmetro especifica o número máximo de conexões simultâneas permitidas com a instância de banco de dados.

  • max_user_connections: este parâmetro pode ser especificado durante a criação e modificação do usuário e define o número máximo de conexões simultâneas permitidas para uma conta de usuário específica.

Tamanho do buffer de rede

Aumentar esses valores pode melhorar o desempenho da rede, especialmente para workloads que envolvem grandes transferências de dados ou conjuntos de resultados. No entanto, é preciso ter cuidado, pois tamanhos maiores de buffer podem consumir mais memória.

  • net_buffer_length: este parâmetro define o tamanho inicial da conexão do cliente e dos buffers de resultados, equilibrando o uso da memória com o desempenho da consulta.

  • max_allowed_packet: este parâmetro especifica o tamanho máximo de um único pacote de rede que pode ser enviado ou recebido pela instância de banco de dados.

Compressão de rede (lado do cliente)

Habilitar a compressão de rede pode reduzir o uso da largura de banda da rede, mas pode aumentar a sobrecarga da CPU nos lados do cliente e do servidor.

  • compress: este parâmetro habilita ou desabilita a compressão de rede para a comunicação cliente/servidor.

  • compress_protocol: este parâmetro especifica o protocolo de compressão a ser usado para comunicação de rede.

Ajuste de desempenho da rede

Ajustar esses tempos limite pode auxiliar a gerenciar conexões ociosas e evitar o esgotamento de recursos. No entanto, é preciso ter cuidado, pois valores baixos podem causar encerramentos prematuros de conexão.

  • interactive_timeout: este parâmetro especifica o número de segundos que o servidor espera por atividade em uma conexão interativa antes de fechá-la.

  • wait_timeout: este parâmetro determina o número de segundos que o servidor espera por atividade em uma conexão não interativa antes de fechá-la.

Configurações de tempo limite de rede

Ajustar esses tempos limite pode ajudar a resolver problemas relacionados a conexões lentas ou sem resposta. No entanto, tenha cuidado para não definir valores muito baixos, pois isso pode causar falhas de conexão prematuras.

  • net_read_timeout: este parâmetro especifica o número de segundos de espera por mais dados de uma conexão antes de encerrar a operação de leitura.

  • net_write_timeout: este parâmetro determina o número de segundos de espera para que um bloco seja gravado em uma conexão antes de encerrar a operação de gravação.

Exemplos de solução de problemas de conexão de banco de dados do Aurora MySQL e

Os exemplos a seguir mostram como identificar e solucionar problemas de conexão de banco de dados do Aurora MySQL e .

Exemplo 1: solução de problemas em tentativas de conexão malsucedidas

As tentativas de conexão podem falhar por vários motivos, incluindo falhas de autenticação, falhas de handshake SSL/TLS, max_connections com limite atingido e restrições de recursos na instância de banco de dados.

É possível rastrear o número de conexões com falha com o Insights de Performance ou usando o comando a seguir.

mysql> show global status like 'aborted_connects'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Aborted_connects | 7 | +------------------+-------+ 1 row in set (0.00 sec)

Se o número de Aborted_connects aumentar com o tempo, a aplicação pode estar tendo problemas intermitentes de conectividade.

Você pode usar a Auditoria avançada do Aurora para registrar as conexões e desconexões das conexões do cliente. Você pode fazer isso definindo os seguintes parâmetros no grupo de parâmetros do cluster de banco de dados:

  • server_audit_logging = 1

  • server_audit_events = CONNECT

Veja a seguir um extrato dos logs de auditoria de uma falha de login.

1728498527380921,auora-mysql-node1,user_1,172.31.49.222,147189,0,FAILED_CONNECT,,,1045 1728498527380940,auora-mysql-node1,user_1,172.31.49.222,147189,0,DISCONNECT,,,0

Em que:

  • 1728498527380921: o carimbo de data/hora da época em que ocorreu falha no login

  • aurora-mysql-node1: o identificador da instância do nó do cluster do Aurora MySQL no qual houve falha de conexão

  • user_1: o nome do usuário do banco de dados para o qual houve falha de login

  • 172.31.49.222: o endereço IP privado do cliente pelo qual a conexão foi estabelecida

  • 147189: o ID de conexão do login com falha

  • FAILED_CONNECT: indica que a conexão falhou.

  • 1045: o código de retorno. Um valor diferente de zero indica um erro. Nesse caso, 1045 corresponde ao acesso negado.

Para obter mais informações, consulte Server error codes e Client error codes na documentação do MySQL.

Você também pode examinar os logs de erro do Aurora MySQL em busca de quaisquer mensagens de erro relacionadas, por exemplo:

2024-10-09T19:26:59.310443Z 220 [Note] [MY-010926] [Server] Access denied for user 'user_1'@'172.31.49.222' (using password: YES) (sql_authentication.cc:1502)

Exemplo 2: solução de problemas de desconexões anormais do cliente

É possível rastrear o número de desconexões anormais de clientes com o Insights de Performance ou usando o comando a seguir.

mysql> show global status like 'aborted_clients'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | Aborted_clients | 9 | +-----------------+-------+ 1 row in set (0.01 sec)

Se o número de Aborted_clients aumentar ao longo do tempo, a aplicação não está fechando as conexões com o banco de dados corretamente. Se as conexões não forem fechadas adequadamente, isso pode levar a vazamentos de recursos e possíveis problemas de desempenho. Conexões abertas desnecessariamente podem consumir recursos do sistema, como memória e descritores de arquivos, o que pode eventualmente fazer com que a aplicação ou o servidor pare de responder ou reinicie.

Você pode usar a consulta a seguir para identificar contas que não estão fechando conexões corretamente. Ela recupera o nome da conta do usuário, o host do qual o usuário está se conectando, o número de conexões abertas e a porcentagem de conexões não fechadas.

SELECT ess.user, ess.host, (a.total_connections - a.current_connections) - ess.count_star AS not_closed, (((a.total_connections - a.current_connections) - ess.count_star) * 100) / (a.total_connections - a.current_connections) AS pct_not_closed FROM performance_schema.events_statements_summary_by_account_by_event_name AS ess JOIN performance_schema.accounts AS a ON (ess.user = a.user AND ess.host = a.host) WHERE ess.event_name = 'statement/com/quit' AND (a.total_connections - a.current_connections) > ess.count_star; +----------+---------------+------------+----------------+ | user | host | not_closed | pct_not_closed | +----------+---------------+------------+----------------+ | user1 | 172.31.49.222 | 1 | 33.3333 | | user1 | 172.31.93.250 | 1024 | 12.1021 | | user2 | 172.31.93.250 | 10 | 12.8551 | +----------+---------------+------------+----------------+ 3 rows in set (0.00 sec)

Depois de identificar as contas de usuário e os hosts dos quais as conexões não estão sendo fechadas, é possível verificar o código que não está fechando as conexões adequadamente.

Por exemplo, com o conector MySQL em Python, use o método close() do objeto de conexão para fechar conexões. Veja a seguir um exemplo de função que estabelece uma conexão com um banco de dados, executa uma consulta e fecha a conexão:

import mysql.connector def execute_query(query): # Establish a connection to the database connection = mysql.connector.connect( host="your_host", user="your_username", password="your_password", database="your_database" ) try: # Create a cursor object cursor = connection.cursor() # Execute the query cursor.execute(query) # Fetch and process the results results = cursor.fetchall() for row in results: print(row) finally: # Close the cursor and connection cursor.close() connection.close()

Neste exemplo, o método connection.close() é chamado no bloco finally para garantir que a conexão seja fechada, independentemente de ocorrer ou não uma exceção.