¿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?
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:
- Active Información sobre el rendimiento para recuperar el periodo de tiempo de las instrucciones SQL que causan la advertencia. Para obtener información sobre la compatibilidad con MySQL de Aurora, consulte Supervisión de la carga de la base de datos con Información sobre el rendimiento en Amazon Aurora.
- Active el registro de consulta lenta en su instancia de base de datos de Amazon RDS o Aurora MySQL. Esto captura y registra todas las consultas que se ejecuten durante más tiempo que long_query_time, que es de 10 segundos de manera predeterminada. Para obtener más información, consulte ¿Cómo puedo activar y supervisar los registros de una instancia de base de datos de Amazon RDS para MySQL?
- Considere la posibilidad de activar los registros de flujo de VPC. Los registros de flujo de VPC permiten ver desde qué lado (cliente o servidor) se cierra la conexión.
- Asegúrese de que su aplicación haya cerrado correctamente la conexión desde MySQL.
- Ejecute el comando tcpdump desde la máquina que ejecuta el cliente para probar las capturas de paquetes de muestra. Por ejemplo:
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?
Vídeos relacionados
Contenido relevante
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 3 años
- OFICIAL DE AWSActualizada hace 2 años