Como resolver o erro "Ocorreu um erro ao ler pacotes de comunicação" no Amazon RDS para MySQL ou no Aurora compatível com MySQL?

5 minuto de leitura
0

Recebi um erro "Ocorreu um erro ao ler pacotes de comunicação". Quero resolver esse erro em uma instância de banco de dados do Amazon Relational Database Service (Amazon RDS) para MySQL ou de uma edição do Aurora compatível com MySQL.

Breve descrição

Se as conexões servidor/cliente forem interrompidas, fechadas incorretamente ou não obtiverem êxito, o Amazon RDS incrementará o contador de status de aborted_clients ou aborted_connects. O parâmetro aborted_clients descreve o número de conexões que foram abortadas porque o cliente parou de funcionar sem que a conexão fosse fechada corretamente. O parâmetro aborted_connects descreve o número de tentativas com falha de conexão com o servidor MySQL.

log_error_verbosity especifica a verbosidade para lidar com eventos destinados ao log de erros. Se o valor desse parâmetro exceder o valor de dois, o RDS para MySQL gravará essas informações no seu log de erros:

[Warning] Aborted connection xxx to db: '<database name>' user: '<user name>' host: '<host IP>' (Got an error reading communication packets)

Esse aviso é acionado sempre que o contador de status dos valores das métricas aborted_clients ou aborted_connects é incrementado. O Amazon RDS usa os logs de erros do banco de dados para recuperar essas informações. Para obter mais informações, consulte Erros de comunicação e conexões abortadas no site do servidor MySQL.

Os fatores que podem acionar o aviso de Conexão abortada incluem, mas não estão limitados a:

  • Incompatibilidade de cliente ou driver
  • Firewalls ou proxies, que podem fechar qualquer conexão ociosa ou bloquear uma conexão.
  • Fechamento incorreto de uma conexão cliente/servidor, resultando em um maior número de conexões inativas dentro do RDS para MySQL.
  • Uma aplicação de cliente que encerra uma conexão indevidamente. Se as conexões ficarem inativas por um determinado período de tempo, o MySQL as fechará à força. Em seguida, você verá a mensagem de Conexão abortada.
  • Conexões ociosas que excedem os limites de wait_timeout ou interactive_timeout.
  • Uma conexão de cliente que excede o limite de segundos de connect_timeout ao obter um pacote de conexão.
  • Valores insuficientes para parâmetros como net_write_timeout e net_read_timeout.
  • Ultrapassagem do valor do parâmetro max_allowed_packet. Se o valor for muito pequeno ou as consultas exigirem mais memória do que a alocada para o RDS para MySQL, isso acionará o aviso de Conexão abordada.

Resolução

Se você receber um erro de Conexão abortada no RDS para MySQL ou no Aurora compatível com MySQL, certifique-se de analisar os valores dos parâmetros do MySQL. Depois de identificar a causa raiz do problema, atualize o parâmetro e teste o novo valor enquanto monitora os logs de erros do MySQL.

Ao solucionar o erro de Conexão abortada no Amazon RDS, considere estas abordagens:

  • Verifique se você está usando os valores padrão de um grupo de parâmetros do Amazon RDS. Os valores padrão dos parâmetros relacionados aos tempos limite de conectividade podem não ser apropriados para sua instância de banco de dados. Para obter mais informações, consulte a seção Parâmetros relacionados ao tempo limite de conectividade das Melhores práticas para configuração de parâmetros do Amazon RDS para MySQL.
  • Defina um valor mais alto para connect_timeout para ver se isso ajuda a reduzir a ocorrência das mensagens de erro de Conexão abortada. Esse parâmetro especifica quanto tempo a instância do servidor MySQL deve esperar (em segundos) antes de responder com um handshake ruim.
  • Altere interactive_timeout e wait_timeout. As aplicações que usam o pooling da conexão (como Java) devem ter tempos limite que correspondam às configurações do pooling de conexão.
  • Aumente o valor de max_allowed_packet se a instância precisar processar consultas grandes. Se uma linha tiver mais dados do que o valor max_allowed_packet para o cliente, os erros serão relatados. Aumente esse valor se você estiver usando colunas BLOB grandes ou strings longas. Para obter mais informações, consulte a seção max_allowed_packet das Melhores práticas para configuração de parâmetros para o Amazon RDS para MySQL.
  • Aumente os valores net_write_timeout e net_read_timeout. Observação: esses valores podem ser definidos com o mesmo valor de wait_timeout.
  • Certifique-se de que as conexões do RDS para MySQL ou Aurora compatível com MySQL estejam devidamente fechadas. Antes de fechar o banco de dados, certifique-se de chamar a função mysql_close() a partir da aplicação cliente.

Dicas para solução de problemas

Se você ainda estiver recebendo a mensagem de erro de Conexão abortada, tente as seguintes dicas para solução de problemas:

  • Ative o Performance Insights para recuperar o período de tempo das instruções SQL que estão causando o aviso. Para o Aurora compatível com MySQL, consulte Monitorar a carga de banco de dados com o Performance Insights no Amazon Aurora.
  • Ative o registro em log lento de consultas em sua instância de banco de dados do Amazon RDS ou do Aurora MySQL. Isso captura e registra todas as consultas em execução por mais que long_query_time, que, por padrão, é 10 segundos. Para obter mais informações, consulte Como ativar e monitorar os logs de uma instância de banco de dados do Amazon RDS para MySQL?
  • Considere ativar os ](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)logs de fluxo da VPC[. Os logs de fluxo da VPC permitem que você veja de qual lado (cliente/servidor) a conexão está sendo fechada.
  • Certifique-se de que sua aplicação fechou corretamente a conexão do MySQL.
  • Execute o comando tcpdump na máquina que está executando o cliente para testar amostras de capturas de pacotes. Por exemplo:
sudo tcpdump -vvv --interface eth0 port 3306 -W 10 -C 100

Informações relacionadas

Como modificar os valores de um grupo de parâmetros de banco de dados do Amazon RDS?

Por que as conexões de banco de dados caíram na minha instância de banco de dados RDS?

Como ativar os logs em um cluster do Aurora Serverless para que eu possa visualizar e baixar os logs?