Passer au contenu

Comment puis-je résoudre l'erreur « Got an error reading communication packets » dans Amazon RDS for MySQL ou Aurora compatible avec MySQL ?

Lecture de 6 minute(s)
0

J’utilise une instance de base de données Amazon Relational Database Service (Amazon RDS) for MySQL ou Amazon Aurora édition compatible avec MySQL. J'ai reçu le message d'erreur « Got an error reading communication packets ».

Brève description

Vous recevez le message d’erreur « [Warning] Aborted connection abc to db: 'database name' user: 'user name' host: 'host IP' (Got an error reading communication packets) ».

Le message d'erreur précédent s'affiche lorsque la valeur du paramètre aborted_clients ou aborted_connects augmente. Amazon RDS annule la connexion et augmente le compteur d'état pour le paramètre aborted_clients lorsque le client meurt et ne ferme pas la connexion ou que celle-ci est interrompue. La valeur du paramètre aborted_connects augmente lorsque le client ne parvient pas à se connecter au serveur MySQL.

Si la valeur de log_error_verbosity supérieure à deux, vous recevez également le message d'erreur. Le paramètre log_error_verbosity spécifie la verbosité nécessaire pour gérer les événements destinés au journal des erreurs. Pour plus d’informations, consultez la page Erreurs de communication et connexions interrompues sur le site Web de MySQL Server.

Les facteurs suivants peuvent provoquer le message d'erreur « Got an error reading communication packets » :

  • Une incompatibilité au niveau du client ou du pilote.
  • Des pare-feux ou des proxys qui ferment toutes les connexions inactives ou bloquent une connexion.
  • Une connexion client-serveur incorrectement fermée qui entraîne une augmentation du nombre de connexions en veille dans Amazon RDS for MySQL.
  • Une application client qui résilie une connexion de manière incorrecte.
    Remarque : MySQL ferme de force les connexions inactives de longue durée.
  • Des connexions inactives qui dépassent les seuils wait_timeout ou interactive_timeout.
  • Une connexion client qui dépasse le seuil de secondes pour connect_timeout lors de l'obtention d'un paquet de connexion.
  • Des valeurs insuffisantes pour des paramètres tels que net_write_timeout et net_read_timeout.
  • Une valeur de paramètre max_allowed_packet est dépassée.
    Remarque : Le problème se produit lorsque la valeur est trop petite ou que les requêtes requièrent plus de mémoire que celle que vous allouez à Amazon RDS for MySQL.

Résolution

Modifier les paramètres de délai d’expiration

Pour identifier la cause du problème, examinez les paramètres liés aux délais d'expiration de la connectivité. Si vous utilisez des valeurs par défaut pour votre groupe de paramètres, modifiez la valeur de délai d’expiration de connectivité par défaut pour votre instance de base de données.

Pour modifier le paramètre de connectivité, procédez comme suit :

  1. Ouvrez la console Amazon RDS.
  2. Dans le volet de navigation, sélectionnez Groupes de paramètres.
  3. Choisissez le groupe de paramètres pour votre instance de base de données.
  4. Sélectionnez Modifier.
  5. Recherchez le paramètre de délai d'expiration de la connectivité, puis modifiez sa valeur.
    Remarque : Après avoir modifié les valeurs, surveillez les journaux d'erreurs MySQL lorsque vous testez la nouvelle valeur.

connect_timeout

Définissez une valeur plus élevée pour connect_timeout afin de vérifier si la valeur réduit l'occurrence de ce problème. Le paramètre connect_timeout définit le nombre de secondes que l'instance de base de données du serveur MySQL doit attendre avant que l'instance de base de données ne réponde par une mauvaise liaison. Pour plus d’informations, consultez la page connect_timeout sur le site Web de MySQL.

interactive_timeout et wait_timeout

Vous pouvez également modifier les paramètres interactive_timeout et wait_timeout. Pour plus d'informations sur ces paramètres, consultez la page wait_timeout ou interactive_timeout sur le site Web de MySQL. Les applications qui utilisent un regroupement de connexions, tel que Java, doivent disposer de délais d'expiration correspondant aux paramètres du regroupement de connexions.

max_allowed_packet

Si l'instance doit gérer des requêtes volumineuses, des colonnes BLOB (Binary Large Object) de grande taille ou de longues chaînes, augmentez la valeur de max_allowed_packet. Si une ligne contient plus de données que la valeur max_allowed_packet, un message d'erreur s’affiche. Pour plus d’informations, consultez la page max_allowed_packet sur le site Web de MySQL.

net_write_timeout et net_read_timeout

Augmentez les valeurs net_write_timeout et net_read_timeout. Vous pouvez définir net_write_timeout et net_read_timeout sur la même valeur que wait_timeout. Pour plus d'informations, consultez la page net_write_timeout et net_read_timeout sur le site Web de MySQL.

Appelez la fonction mysql_close() depuis l'application client pour vous assurer que les connexions compatibles avec Amazon RDS for MySQL ou Aurora MySQL se ferment correctement.

Utiliser d'autres méthodes de résolution des problèmes

Si le message d'erreur « Got an error reading communications packets « persiste, effectuez l'une des actions suivantes :

  • Activez Performance Insights pour obtenir la période des instructions SQL qui rencontrent des problèmes. Pour Aurora compatible avec MySQL, consultez la section Activation et désactivation de Performance Insights pour Aurora.
    Important : Performance Insights atteindra sa fin de vie le 30 juin 2026. Vous pouvez effectuer une mise à niveau vers le mode Avancé de Database Insights avant le 30 juin 2026. Si vous n'effectuez pas de mise à niveau, les clusters de base de données qui utilisent Performance Insights passeront par défaut au mode Standard de Database Insights. Seul le mode Avancé de Database Insights prendra en charge les plans d'exécution et l’analyse à la demande. Si vos clusters passent par défaut en mode Standard, il est possible que vous ne puissiez pas utiliser ces fonctionnalités sur la console. Pour activer le mode Avancé, consultez la section Activation du mode Avancé de Database Insights pour Amazon RDS et Activation du mode Avancé de Database Insights pour Amazon Aurora.
  • Activez les journaux de requêtes lentes sur votre instance de base de données Amazon RDS ou Aurora compatible avec MySQL pour enregistrer les requêtes qui s'exécutent pendant une durée supérieure à la valeur de long_query_time.
    Remarque : La valeur de long_query_time est de 10 secondes.
  • Activez Amazon Virtual Private Cloud (Amazon VPC) Flow Logs pour vérifier si le serveur ou le client a fermé la connexion.
  • Vérifiez que votre application a correctement fermé la connexion depuis MySQL.
  • Exécutez la commande tcpdump suivante à partir de la machine qui exécute le client pour tester des exemples de captures de paquets :
    sudo tcpdump -vvv --interface eth0 port 3306 -W 10 -C 100

Informations connexes

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

Comment consulter et télécharger les journaux d'un cluster de base de données Aurora sans serveur ?