Comment résoudre l'erreur « Got an error reading communication packets » (Une erreur s'est produite lors de la lecture des paquets de communication) dans Amazon RDS for MySQL ou Aurora MySQL-Compatible ?

Lecture de 6 minute(s)
0

J'ai reçu l'erreur « Got an error reading communication packets » (Une erreur s'est produite lors de la lecture des paquets de communication). Je souhaite résoudre cette erreur dans une instance de base de données Amazon Relational Database Service (Amazon RDS) pour MySQL ou Amazon Aurora, édition compatible avec MySQL.

Brève description

Si des connexions serveur-client sont abandonnées, improprement fermées ou échouées, Amazon RDS incrémente le compteur d'état pour aborted_clients ou aborted_connects. Le paramètre aborted_clients décrit le nombre de connexions qui ont été abandonnées parce que le client est décédé sans avoir fermé correctement la connexion. Le paramètre aborted_connects décrit le nombre de tentatives infructueuses de connexion au serveur MySQL.

log_error_verbosity indique le niveau de détail de la gestion des événements destinés au journal des erreurs. Si la valeur de ce paramètre dépasse la valeur 2, RDS pour MySQL écrit ces informations dans votre journal des erreurs :

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

Cet avertissement est déclenché chaque fois que le compteur d'état des valeurs métriques aborted_clients ou aborted_connects est incrémenté. Amazon RDS utilise les journaux d'erreurs de la base de données pour obtenir ces informations. Pour plus d'informations, consultez Communication errors and aborted connections (Erreurs de communication et connexions interrompues) sur le site Web du serveur MySQL.

Les facteurs qui peuvent déclencher l'avertissement de connexion interrompue incluent (mais ne sont pas limités à) ce qui suit :

  • Incompatibilité avec le client ou le pilote
  • Pare-feu ou proxies, qui peuvent fermer toute connexion inactive ou bloquer une connexion.
  • Fermeture incorrecte d'une connexion client-serveur, ce qui entraîne un nombre plus élevé de connexions en veille dans RDS for MySQL.
  • Une application client qui met fin à une connexion incorrectement. Si les connexions restent inactives pendant un certain temps, MySQL ferme ces connexions de force. Le message de connexion abandonnée s'affiche alors.
  • Des connexions inactives qui dépassent les seuils wait_timeout ou interactive_timeout.
  • Une connexion client qui dépasse le seuil de secondes connect_timeout lors de l'obtention d'un paquet de connexion.
  • Valeurs insuffisantes pour des paramètres tels que net_write_timeout et net_read_timeout.
  • La valeur du paramètre max_allowed_packet est dépassée. Si la valeur est trop petite ou si les requêtes nécessitent plus de mémoire que celle allouée à RDS pour MySQL, cela déclenche l'avertissement de Connexion abandonnée.

Solution

Si vous recevez une erreur de connexion interrompue dans RDS for MySQL ou Aurora MySQL-Compatible, vérifiez les valeurs de vos paramètres MySQL. Après avoir identifié la cause racine de votre problème, mettez à jour le paramètre et testez la nouvelle valeur, tout en surveillant les journaux des erreurs MySQL.

Lors du dépannage de l'erreur de connexion interrompue dans Amazon RDS, considérez les approches suivantes :

  • Vérifiez si vous utilisez les valeurs par défaut d'un groupe de paramètres Amazon RDS. Les valeurs par défaut des paramètres liés aux délais d'expiration de connectivité peuvent ne pas être appropriées pour votre instance de base de données. Pour plus d'informations, consultez la section Paramètres liés aux délais d'expiration de connectivité dans Bonnes pratiques pour la configuration des paramètres pour Amazon RDS for MySQL.
  • Définissez une valeur plus élevée pour connect_timeout pour voir si cela permet de réduire l'occurrence des messages d'erreur de connexion interrompue. Ce paramètre indique combien de temps l'instance de serveur MySQL doit attendre (en secondes) avant de répondre par une mauvaise liaison.
  • Modifier interactive_timeout et**wait_timeout**. Les applications qui utilisent le regroupement de connexions (comme Java) doivent avoir des délais d'attente qui correspondent aux paramètres du groupe de connexions.
  • Augmentez la valeur de max_allowed_packet si l'instance doit traiter de grosses requêtes. Si une ligne contient plus de données que la valeur max_allowed_packet pour le client, des erreurs sont signalées. Augmentez cette valeur si vous utilisez des colonnes BLOB de grande taille ou de longues chaînes de caractères. Pour plus d'informations, consultez la section max_allowed_packet dans Bonnes pratiques pour la configuration des paramètres pour Amazon RDS for MySQL.
  • Augmentez les valeurs net_write_timeout et net_read_timeout. Remarque : Ces valeurs peuvent être définies sur la même valeur que wait_timeout.
  • Assurez-vous que les connexions RDS pour MySQL ou compatible avec Aurora MySQL sont correctement fermées. Avant de quitter la base de données, assurez-vous d'appeler la fonction mysql_close() à partir de l'application cliente.

Conseils de dépannage

Si vous recevez toujours le message d'erreur Connexion interrompue, essayez les conseils de dépannage suivants :

sudo tcpdump -vvv --interface eth0 port 3306 -W 10 -C 100

Informations connexes

Comment puis-je modifier les valeurs de paramètres d'un groupe de paramètres de base de données Amazon RDS ?

Pourquoi les connexions aux bases de données ont-elles été interrompues sur mon instance de bases de données RDS ?

Comment puis-je activer les journaux dans un cluster Aurora Serverless afin de pouvoir les parcourir et les télécharger ?