Eu uso uma instância de banco de dados do Amazon Relational Database Service (Amazon RDS) para MySQL ou de uma edição compatível com Amazon Aurora MySQL. Recebi o erro “Ocorreu um erro ao ler pacotes de comunicação”.
Breve descrição
Se as conexões servidor/cliente forem interrompidas, fechadas incorretamente ou não obtiverem êxito, o Amazon RDS aumenta o contador de status de aborted_clients ou aborted_connects. O parâmetro aborted/_clients descreve o número de conexões que o Amazon RDS cancelou porque o cliente morreu e não fechou a conexão corretamente. O parâmetro aborted_connects descreve o número de tentativas com falha de conexão com o servidor MySQL.
Se o valor de qualquer um desses parâmetros aumentar, você receberá o seguinte erro em seus logs:
“[Warning] Conexão abortada abc com db: “nome do banco de dados” usuário: “nome de usuário” host: “IP do host” (Ocorreu um erro ao ler pacotes de comunicação)”.
Se o valor de log_error_verbosity exceder 2, você também receberá o erro anterior. O parâmetro log_error_verbosity especifica a verbosidade para gerenciar eventos destinados ao log de erros.
Para obter mais informações, consulte B.3.2.9 Erros de comunicação e conexões abortadas no site do MySQL.
Os seguintes fatores podem causar o erro Erro ao ler pacotes de comunicação:
- Incompatibilidade de cliente ou driver.
- Firewalls ou proxies, que podem fechar qualquer conexão ociosa ou bloquear uma conexão.
- Uma conexão cliente-servidor que está fechada incorretamente e resulta em um número maior de conexões inativas dentro do RDS para MySQL.
- Uma aplicação de cliente que encerra uma conexão incorretamente.
Observação: O MySQL fecha forçosamente conexões ociosas de longa duração.
- 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 quando obtém um pacote de conexão.
- Valores insuficientes para parâmetros como net_write_timeout e net_read_timeout.
- Um valor do parâmetro max_allowed_packet excedido.
Observação: Se o valor for muito pequeno ou as consultas exigirem mais memória do que a alocada para o Amazon RDS para MySQL, você receberá o erro anterior.
Resolução
Verifique os valores do parâmetro de tempo limite de conectividade. Depois de identificar a causa raiz do problema, altere o valor do parâmetro com base no problema que você identificou. Em seguida, monitore os logs de erros do MySQL ao testar o novo valor.
Solucione problemas de sua configuração
Verifique se você está usando os valores padrão do grupo de parâmetros do Amazon RDS. Talvez seja necessário modificar o valor do tempo limite de conectividade padrão 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 Práticas recomendadas para configuração de parâmetros do Amazon RDS para MySQL, parte 3: Parâmetros relacionados à segurança, capacidade de gerenciamento operacional e tempo limite de conectividade.
Defina um valor maior para connect_timeout para testar se o valor reduz a ocorrência do erro Erro ao ler pacotes de comunicação. O parâmetro connect_timeout define quantos segundos a instância de banco de dados do servidor MySQL deve esperar antes de responder com um handshake incorreto. Para obter mais informações, consulte connect_timeout no site do MySQL.
Você também pode alterar interactive_timeout e wait_timeout. Para obter mais informações sobre esses parâmetros, consulte wait_timeout ou interactive_timeout no site do MySQL. 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.
Se a instância precisar gerenciar consultas grandes, colunas BLOB grandes ou cadeias de caracteres longas, aumente o valor de max_allowed_packet. Se uma linha tiver mais dados do que o valor max_allowed_packet, você receberá um erro. Para obter mais informações, consulte a seção max_allowed_packet das Práticas recomendadas para configuração de parâmetros para o Amazon RDS para MySQL, parte 3: Parâmetros relacionados à segurança, capacidade de gerenciamento operacional e tempo limite de conectividade. Ou veja max_allowed_packet no site do MySQL. Além disso, aumente os valores net_write_timeout e net_read_timeout.
Observação: Você pode definir net_write_timeout e net_read_timeout com o mesmo valor de wait_timeout. Para obter mais informações, consulte net_write_timeout e net_read_timeout no site do MySQL.
Certifique-se de que as conexões do RDS para MySQL ou edição compatível do Amazon Aurora MySQL estejam corretamente fechadas. Antes de sair do banco de dados, chame a função mysql_close() da aplicação cliente.
Solução de problemas avançada
Se você ainda receber a mensagem de erro Erro ao ler pacotes de comunicação, execute qualquer uma das seguintes ações:
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?