¿Cómo puedo solucionar el error «Se ha producido un error de lectura de los paquetes de comunicación» en Amazon RDS para MySQL o en la versión compatible con MySQL de Aurora?

6 minutos de lectura
0

He recibido un mensaje de error de «Error de lectura de los paquetes de comunicación». Quiero resolver este error en una instancia de base de datos de la Edición compatible con MySQL de Amazon Aurora o de Amazon Relational Database Service (Amazon RDS) para MySQL.

Descripción breve

Si las conexiones servidor-cliente se interrumpen, no se cierran de forma adecuada o no se llevan a cabo correctamente, Amazon RDS incrementa el contador de estado tanto de aborted_clients como de aborted_connects. El parámetro aborted_clients describe el número de conexiones que se han anulado porque el cliente se interrumpió sin cerrar la conexión correctamente. El parámetro aborted_connect describe el número de intentos fallidos de conectarse al servidor MySQL.

log_error_verbosity especifica el detalle necesario para gestionar los eventos destinados al registro de errores. Si el valor de este parámetro supera un valor de 2, RDS para MySQL escribe esta información en el registro de errores:

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

Esta advertencia se activa cada vez que se incrementa el contador de estado para los valores de las métricas aborted_clients o aborted_connects. Amazon RDS utiliza los registros de errores de la base de datos para recuperar esta información. Para obtener más información, consulte Errores de comunicación y conexiones anuladas en el sitio web del servidor MySQL.

Los factores que pueden activar la advertencia de conexión anulada incluyen, entre otros:

  • Incompatibilidad de cliente o controlador
  • Firewalls o proxies, que pueden cerrar cualquier conexión inactiva o bloquearla.
  • El cierre incorrecto de una conexión cliente-servidor provoca un mayor número de conexiones inactivas dentro de RDS para MySQL.
  • Una aplicación cliente que termina una conexión de forma incorrecta. Si las conexiones permanecen inactivas durante cierto tiempo, MySQL las cierra forzosamente. A continuación, aparecerá el mensaje Conexión anulada.
  • Conexiones inactivas que superan los umbrales de espera wait_timeout o interactive_timeout.
  • Una conexión de cliente que supera el umbral de segundos de connect_timeout al obtener un paquete de conexión.
  • Valores insuficientes para parámetros como net_write_timeout y net_read_timeout.
  • Se ha superado el valor del parámetro max_allowed_packet. Si el valor es demasiado pequeño o las consultas requieren más memoria de la asignada a RDS para MySQL, se activa la advertencia de Conexión anulada.

Resolución

Si recibe un error de Conexión anulada en RDS para MySQL o en la versión compatible con MySQL de Amazon Aurora, asegúrese de revisar los valores de los parámetros de MySQL. Después de identificar la causa raíz del problema, actualice el parámetro y pruebe el nuevo valor, mientras supervisa los registros de errores de MySQL.

Al solucionar el error de Conexión anulada en Amazon RDS, tenga en cuenta los siguientes puntos:

  • Compruebe si está utilizando los valores predeterminados de un grupo de parámetros de Amazon RDS. Es posible que los valores predeterminados de los parámetros relacionados con los tiempos de espera de conectividad no sean adecuados para su instancia de base de datos. Para obtener más información, consulte la sección Parámetros relacionados con el tiempo de espera de conectividad de las Prácticas recomendadas para configurar los parámetros de Amazon RDS para MySQL.
  • Establezca un valor más alto para connect_timeout para comprobar si esto ayuda a reducir la aparición de mensajes de error de Conexión anulada. Este parámetro especifica cuánto tiempo debe esperar la instancia del servidor MySQL (en segundos) antes de responder con un protocolo de enlace incorrecto.
  • Modifique los tiempos de espera interactive_timeout y wait_timeout. Las aplicaciones que utilizan agrupaciones de conexiones (como Java) deben tener tiempos de espera que coincidan con la configuración del grupo de conexiones.
  • Aumente el valor de max_allowed_packet si la instancia debe gestionar consultas grandes. Si una fila contiene más datos que el max_allowed_packet para el cliente, se registrarán errores. Aumente este valor si utiliza columnas BLOB grandes o cadenas largas. Para obtener más información, consulte la sección max_allowed_packet de las Prácticas recomendadas para configurar los parámetros de Amazon RDS para MySQL.
  • Aumente los valores net_write_timeout y net_read_timeout. Nota: Estos valores se pueden establecer en el mismo valor que el tiempo de espera wait_timeout.
  • Asegúrese de que las conexiones de RDS para MySQL o de la versión compatible con MySQL de Aurora estén cerradas correctamente. Antes de salir de la base de datos, asegúrese de llamar a la función mysql_close() desde la aplicación cliente.

Consejos para solucionar problemas

Si sigue recibiendo el mensaje de Conexión anulada, pruebe los siguientes consejos de solución de problemas:

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

Información relacionada

¿Cómo modifico los valores de un grupo de parámetros de base de datos de Amazon RDS?

¿Por qué se han interrumpido las conexiones de base de datos en mi instancia de base de datos de RDS?

¿Cómo puedo activar los registros en un clúster de Aurora Serverless para poder ver y descargar los registros?