Réduire le délai de connexion à un serveur MySQL

Dans le cadre du développement d’un formulaire personnalisé pour Outlook, j’avais besoin d’accéder à une base de données hébergée sur un serveur MySQL sous Ubuntu.

Lors de l’établissement de la connexion ODBC, je constatais systématiquement un délai symptomatique de 5 secondes lors de l’exécution du code VBA ci-dessous :

Set adoConnexion = CreateObject( "ADODB.Connection" )
adoConnexion.ConnectionString = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=...;DATABASE=...;USER=...;PASSWORD=...;OPTION=3;"
adoConnexion.Open

Après avoir cherché un bon moment pour comprendre ce qui pouvait bien engendrer un délai aussi rédibitoire, j’ai fini par découvrir que cela était du au mécanisme utilisé par le serveur MySQL pour identifier les connexions des nouveaux clients.

Pour faire court, lorsqu’un nouveau client se connecte à un serveur MySQL, ce dernier vérifie son identité en deux temps. Tout d’abord en faisant une première résolution pour obtenir son nom d’hôte à partir de son adresse IP, puis en faisant une deuxième résolution pour obtenir son adresse IP à partir du nom d’hôte récupéré. Ces résolutions font appels aux services de DNS et prennent un certain temps, qui peut s’avérer pénalisant si les résolutions échouent, si le service de DNS est lent ou surchargé, ou encore si le nombre de demande de connexions simultannées est très important.

Si comme moi vous n’avez pas besoin de spécifier des noms d’hôtes particuliers dans les tables de privilèges de votre serveur MySQL, ou bien si vous pouvez les remplacer par leurs adresses IP, alors vous pouvez désactiver le mécanisme d’identification qui cause ce ralentissement. Pour ce faire, il suffit d’ajouter l’option skip-name-resolve au fichier de configuration du serveur MySQL et de redémarrer le service mysql.

Voici la procédure pour Ubuntu :

  1. lancez un terminal ;
  2. éditez le fichier /etc/mysql/my.cnf en mode superutilisateur avec votre éditeur favori – en exécutant par exemple la commande sudo vi /etc/mysql/my.cnf ;
  3. ajoutez l’option skip-name-resolve dans la section [mysqld] ;
  4. enregistrez le fichier et fermez votre éditeur ;
  5. exécutez la commande sudo /etc/init.d/mysql restart pour redémarrer votre serveur MySQL.

Vous devriez retrouver le sourire :-)

Source : How MySQL Uses DNS

À lire également...

 Poster un commentaire