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 :
- Ouvrez la console Amazon RDS.
- Dans le volet de navigation, sélectionnez Groupes de paramètres.
- Choisissez le groupe de paramètres pour votre instance de base de données.
- Sélectionnez Modifier.
- 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 :
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 ?