Solución de problemas de conectividad en Azure Database for MySQL: servidor flexible
SE APLICA A: Azure Database for MySQL (servidor único) Azure Database for MySQL (servidor flexible)
Importante
El servidor único de Azure Database for MySQL está en proceso de retirada. Es muy recomendable actualizar al servidor flexible de Azure Database for MySQL. Para obtener más información sobre la migración al servidor flexible de Azure Database for MySQL, consulte ¿Qué sucede con el servidor único de Azure Database for MySQL?
MySQL Community Edition administra las conexiones mediante un subproceso por conexión. Como resultado, cada conexión de usuario obtiene un subproceso de sistema operativo dedicado en el proceso mysqld.
Hay posibles problemas asociados a este tipo de control de conexiones. Por ejemplo, el uso de memoria es relativamente alto si hay un gran número de conexiones de usuario, incluso si son conexiones inactivas. Además, hay un mayor nivel de contención interna del servidor y sobrecarga de cambio de contexto al trabajar con miles de conexiones de usuario.
Diagnóstico de errores comunes de conectividad
Siempre que la instancia del servidor flexible de Azure Database for MySQL esté experimentando problemas de conectividad, recuerde que los problemas pueden existir en cualquiera de las tres capas implicadas: el dispositivo cliente, la red o la instancia de servidor flexible de Azure Database for MySQL.
Como resultado, siempre que diagnostique errores de conectividad, asegúrese de tener en cuenta los detalles completos de:
- Cliente, el cual incluye:
- Configuración (local, máquina virtual de Azure, etc. o una máquina DBA).
- Sistema operativo:
- Software y versiones.
- Cadena de conexión y cualquier parámetro incluido.
- La topología de red (¿misma región? ¿Mismas reglas de firewall de AZ? Enrutamiento).
- Grupo de conexiones (parámetros y configuración), si está en uso.
También es importante determinar si el problema de conectividad de la base de datos afecta a uno o a varios dispositivos cliente. Si los errores afectan solo a uno de varios clientes, es probable que el problema sea con ese cliente. Sin embargo, si todos los clientes experimentan el mismo error, lo más probable es que el problema esté en el lado del servidor de base de datos o con las redes entre sí.
Asegúrese de tener en cuenta también el potencial de sobrecarga de carga de trabajo, especialmente si una aplicación abre un aumento de conexiones en un periodo de tiempo muy corto. Puede usar métricas como "Conexiones totales", "Conexiones activas" y "Conexiones anuladas" para investigar esto.
Cuando se establece la conectividad desde un dispositivo cliente o una aplicación, la primera llamada importante de mysql es getaddrinfo, que realiza la traducción de DNS desde el punto de conexión proporcionado a una dirección IP. Si se produce un error en la dirección, MySQL muestra un mensaje de error como 'ERROR2005 (HY000): host de servidor MySQL desconocido 'mysql-example.mysql.database.azure.com' (11)' y el número al final (11, 110, etc.).
Códigos de error 2005 de cliente
Las notas de referencia rápidas para algunos códigos de error 2005 de cliente aparecen en la tabla siguiente.
Código ERROR 2005 | Notas |
---|---|
(11) 'EAI_SYSTEM - system error' | Hay un error en la resolución DNS por parte del cliente. No es un problema con el servidor flexible de Azure Database for MySQL. Use dig/nslookup en el cliente para solucionar problemas. |
(110) 'ETIMEDOUT - Connection timed out' | Se ha agotado el tiempo de espera para conectarse al servidor DNS del cliente. No es un problema con el servidor flexible de Azure Database for MySQL. Use dig/nslookup en el cliente para solucionar problemas. |
(0) 'name unknown' | DNS no puede resolver el nombre especificado. Compruebe la entrada en el cliente. Esto es muy probable que no sea un problema con el servidor flexible de Azure Database for MySQL. |
La segunda llamada de mysql es con conectividad de socket y al examinar un mensaje de error como "ERROR 2003 (HY000): No se puede conectar al servidor flexible de Azure Database for MySQL en "mysql-example.mysql.database.azure.com" (111)", el número al final (99, 110, 111, 113, etc.).
Códigos de error 2003 de cliente
Las notas de referencia rápidas para algunos códigos de error 2003 de cliente aparecen en la tabla siguiente.
Código ERROR 2003 | Notas |
---|---|
(99) 'EADDRNOTAVAIL - Cannot assign requested address' | Este error no se debe al servidor flexible de Azure Database for MySQL, sino que se encuentra en el lado cliente. |
(110) 'ETIMEDOUT - Connection timed out' | Ha habido un tiempo de espera durante la conexión a la dirección IP proporcionada. Es probable que se produzca un problema de seguridad (reglas de firewall) o de red (enrutamiento). Normalmente, esto no es un problema con el servidor flexible de Azure Database for MySQL. Use nc/telnet/TCPtraceroute en el dispositivo cliente para solucionar problemas. |
(111) 'ECONNREFUSED - Connection refused' | Aunque los paquetes llegaron al servidor de destino, el servidor rechazó la conexión. Puede tratarse de un intento de conectarse al un servidor o puerto incorrecto. Esto también puede relacionarse con el servicio de destino (servidor flexible de Azure Database for MySQL) inactivo, la recuperación de la conmutación por error o la recuperación de bloqueos y aún no acepta conexiones. Este problema podría ser tanto del cliente como del servidor. Use nc/telnet/TCPtraceroute en el dispositivo cliente para solucionar problemas. |
(113) 'EHOSTUNREACH - Host unreachable' | La tabla de enrutamiento del dispositivo cliente no incluye una ruta de acceso a la red en la que se encuentra el servidor de base de datos. Compruebe la configuración de red del dispositivo cliente. |
Otros códigos de error
Las notas de referencia rápida para otros códigos de error relacionados con los problemas que se producen después de que la conexión de red con el servidor de bases de datos se establezca correctamente en la tabla siguiente.
Código de ERROR | Notas |
---|---|
ERROR 2013 'Lost connection to MySQL server' | La conexión se estableció, pero se perdió después. Esto puede ocurrir si se intenta una conexión con algo que no es MySQL (por ejemplo, el uso de un cliente MySQL para conectarse a SSH en el puerto 22). También puede ocurrir si el superusuario termina la sesión. También puede ocurrir si la base de datos agota el tiempo de espera de la sesión. O bien puede hacer referencia a problemas en el servidor de bases de datos, una vez establecida la conexión. Esto puede ocurrir en cualquier momento durante la vigencia de la conexión de cliente. Esto puede indicar que la base de datos tenía un problema grave. |
ERROR 1040 'Too many connections' | El número de clientes de base de datos conectados ya está en el número máximo configurado. Debe evaluar por qué se establecen tantas conexiones en la base de datos. |
ERROR 1045 'Access denied for user' | El cliente proporcionó un nombre de usuario o una contraseña incorrectos, por lo que la base de datos ha denegado el acceso. |
ERROR 2006 'MySQL server has gone away' | De forma similar a la entrada ERROR 2013 'Lost connection to MySQL server' de la tabla anterior. |
ERROR 1317 'Query execution was interrupted' | Error que el cliente recibe cuando el usuario principal detiene la consulta, no la conexión. |
ERROR 1129 'Host '1.2.3.4' is blocked because of many connection errors' | Desbloquear con 'mysqladmin flush-hosts': todos los clientes de una sola máquina se bloquearán si un cliente de esa máquina intenta usar varias veces el protocolo incorrecto para conectarse con MySQL (un ejemplo es la implementación de telnet en el puerto mySQL). Como indica el mensaje de error, el usuario administrador de la base de datos debe ejecutarse FLUSH HOSTS; para tratar el problema. |
Nota:
Para más información sobre los errores de conectividad, consulte la entrada de blog Investigación de problemas de conexión con el servidor flexible de Azure Database for MySQL.
Pasos siguientes
Para encontrar respuestas de los compañeros a sus preguntas o publicar una nueva pregunta o respuesta, visite Stack Overflow.