Résoudre les problèmes de connectivité dans Azure Database pour MySQL - Serveur flexible

S’APPLIQUE À : Azure Database pour MySQL - Serveur unique Azure Database pour MySQL - Serveur flexible

Important

Azure Database pour MySQL serveur unique se trouve sur le chemin de mise hors service. Nous vous recommandons vivement de procéder à la mise à niveau vers Azure Database pour MySQL serveur flexible. Pour plus d’informations sur la migration vers Azure Database pour MySQL serveur flexible, consultez Ce qui se passe pour Azure Database pour MySQL serveur unique ?

MySQL Community Edition gère les connexions en utilisant un thread par connexion. Par conséquent, chaque connexion utilisateur reçoit un thread de système d’exploitation dédié dans le processus de mysqld.

Il existe des problèmes potentiels associés à ce type de gestion des connexions. Par exemple, l’utilisation de la mémoire est relativement élevée en présence d’un grand nombre de connexions utilisateur, même inactives. En outre, le niveau de contention interne du serveur et les charges de basculement de contexte sont plus élevés en travaillant avec des milliers de connexions utilisateur.

Diagnostic des erreurs de connectivité courantes

Chaque fois que votre instance de Azure Database pour MySQL serveur flexible rencontre des problèmes de connectivité, n’oubliez pas que les problèmes peuvent exister dans l’une des trois couches impliquées : l’appareil client, le réseau ou votre instance de serveur flexible Azure Database pour MySQL.

Par conséquent, chaque fois que vous diagnostiquez des erreurs de connectivité, veillez à prendre pleinement en compte les détails suivants :

  • Client, y compris les éléments suivants :
    • Configuration (locale, machine virtuelle Azure, etc., ou machine DBA).
    • Système d’exploitation.
    • Logiciels et versions.
  • Chaîne de connexion et tous les paramètres inclus.
  • Topologie de réseau (région, zone de disponibilité, règles de pare-feu, routage).
  • Pool de connexions (paramètres et configuration), si utilisé.

Il est également important de déterminer si le problème de connectivité de base de données affecte un ou plusieurs appareils clients. Si les erreurs n’affectent qu’un seul des clients, il est probable que le problème soit lié à celui-ci. En revanche, si tous les clients rencontrent la même erreur, il est plus probable que le problème soit lié au serveur de base de données ou au réseau.

Veillez également à prendre en compte le risque de surcharge de travail, notamment si une application ouvre un grand nombre de connexions en un temps très court. Vous pouvez utiliser des métriques telles que « Nombre total de connexions », « Connexions actives » et « Connexions abandonnées » pour examiner cela.

Lorsque vous établissez une connexion à partir d’une application ou d’un appareil clients, le premier appel important dans mysql est adressé à getaddrinfo qui opère la résolution DNS à partir du point de terminaison fourni à une adresse IP. Si l’obtention de l’adresse échoue, MySQL affiche un message d’erreur tel que « ERROR 2005 (HY000): Unknown MySQL server host ’mysql-example.mysql.database.azure.com’ (11) », le nombre à la fin étant variable (11, 110, etc.).

Codes d’erreur 2005 côté client

Les notes de référence rapides pour certains codes d’erreur 2005 côté client apparaissent dans le tableau suivant.

Code d’erreur 2005 Remarques
(11) « EAI_SYSTEM - system error » Une erreur apparaît sur la résolution DNS côté client. Pas un problème de serveur flexible Azure Database pour MySQL. Utilisez dig/nslookup sur le client pour résoudre le problème.
(110) « ETIMEDOUT - Connection timed out » Il y a eu une expiration délai de connexion au serveur DNS du client. Pas un problème de serveur flexible Azure Database pour MySQL. Utilisez dig/nslookup sur le client pour résoudre le problème.
(0) « name unknown » Le DNS n’a pas pu résoudre le nom spécifié. Vérifiez l’entrée sur le client. Cela n’est probablement pas un problème avec Azure Database pour MySQL serveur flexible.

Le deuxième appel dans mysql est avec la connectivité de socket et lorsque vous examinez un message d’erreur tel que « ERROR 2003 (HY000) : Impossible de se connecter à Azure Database pour MySQL serveur flexible sur « mysql-example.mysql.database.azure.com » (111) », le numéro à la fin (99, 110, 111, 113, etc.).

Codes d’erreur 2003 côté client

Les notes de référence rapides pour certains codes d’erreur 2003 côté client apparaissent dans le tableau suivant.

Code d’erreur 2003 Remarques
(99) « EADDRNOTAVAIL - Cannot assign requested address » Cette erreur n’est pas causée par Azure Database pour MySQL serveur flexible, plutôt qu’elle se trouve côté client.
(110) « ETIMEDOUT - Connection timed out » Il y a eu une expiration délai de connexion à l’adresse IP fournie. Probablement un problème de sécurité (règles de pare-feu) ou de mise en réseau (routage). En règle générale, il ne s’agit pas d’un problème avec Azure Database pour MySQL serveur flexible. Utilisez nc/telnet/TCPtraceroute sur l’appareil client pour résoudre le problème.
(111) « ECONNREFUSED - Connection refused » Alors que les paquets ont atteint le serveur cible, celui-ci a rejeté la connexion. Il pourrait s’agir d’une tentative de connexion à un serveur ou à un port incorrects. Cela peut également être lié au service cible (Azure Database pour MySQL serveur flexible) en cours de panne, à la récupération à partir du basculement ou à la récupération d’incident, et ne pas encore accepter les connexions. Ce problème pourrait se produire côté client ou côté serveur. Utilisez nc/telnet/TCPtraceroute sur l’appareil client pour résoudre le problème.
(113) « EHOSTUNREACH - Host unreachable » La table de routage de l’appareil client n’inclut pas de chemin d’accès au réseau sur lequel se trouve le serveur de base de données. Vérifiez la configuration réseau de l’appareil client.

Autres codes d'erreur

Des notes de référence rapides pour certains autres codes d’erreur liés à des problèmes qui se produisent après l’établissement de la connexion réseau avec le serveur de base de données figurent dans le tableau suivant.

Code d’erreur Remarques
ERROR 2013 « Lost connection to MySQL server » La connexion a été établie, mais elle a été perdue par la suite. Cela peut se produire si une connexion est tentée à quelque chose qui n’est pas MySQL (comme l’utilisation d’un client MySQL pour se connecter à SSH sur le port 22). Cela peut également se produire si le super utilisateur tue la session. Cela peut également se produire si la base de données interrompt la session. Ou cela peut avoir trait à des problèmes survenant dans le serveur de base de données, une fois la connexion établie. Cela peut se produire à tout moment pendant la durée de vie de la connexion client. Cela peut indiquer que la base de données a rencontré un problème sérieux.
ERROR 1040 « Too many connections » Le nombre de clients de base de données connectés a déjà atteint le nombre maximal configuré. Vous devez évaluer pourquoi tant de connexions à la base de données sont établies.
ERROR 1045 « Access denied for user » Le client a fourni un nom d’utilisateur ou un mot de passe incorrects, de sorte que la base de données a refusé l’accès.
ERROR 2006 « MySQL server has gone away » Similaire à l’entrée ERROR 2013 « Lost connection to MySQL server » dans le tableau précédent.
ERROR 1317 « Query execution was interrupted » Erreur que le client reçoit lorsque l’utilisateur principal arrête la requête, pas la connexion.
ERROR 1129 « Host ’1.2.3.4’ is blocked because of many connection errors » Débloquez avec « mysqladmin flush-hosts » : tous les clients dans une même machine seront bloqués si un seul d’entre eux tente plusieurs fois d’utiliser un protocole erroné pour se connecter à MySQL (par exemple, une connexion telnet au port MySQL). Comme l’indique le message d’erreur, l’utilisateur administrateur de la base de données doit exécuter FLUSH HOSTS; pour résoudre le problème.

Remarque

Pour plus d’informations sur les erreurs de connectivité, consultez le billet de blog Examen des problèmes de connexion avec Azure Database pour MySQL serveur flexible.

Étapes suivantes

Pour trouver des réponses de pairs aux questions qui vous préoccupent le plus, ou pour poster une question ou répondre à une question, visitez le forum Stack Overflow.