Partager via


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

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.

Diagnostiquer les erreurs de connectivité les plus courantes

Chaque fois que votre instance de Serveur flexible Azure Database pour MySQL rencontre des problèmes de connectivité, rappelez-vous que des problèmes peuvent se produire dans n’importe laquelle 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, à savoir :
    • 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 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 2,005 côté client

Les notes de référence rapides pour certains codes d’erreur 2,005 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 lié à Serveur flexible Azure Database pour MySQL.

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

Codes d’erreur 2,003 côté client

Les notes de référence rapides pour certains codes d’erreur 2,003 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 Serveur flexible Azure Database pour MySQL, mais se produit plutôt 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). Ce n’est généralement pas un problème lié à Serveur flexible Azure Database pour MySQL. 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 pourrait également être lié au fait que le service cible (Serveur flexible Azure Database pour MySQL) est en panne, qu’il récupère d’un basculement ou qu’il est en phase de récupération sur incident, et qu’il n’accepte pas encore de 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 liés à Serveur flexible Azure Database pour MySQL.

Étape suivante