Quand un nouveau thread se connecte à
mysqld
, mysqld
crée
nouveau thread pour traiter la requête. Ce thread contrôle
d'abord si le nom de l'hôte est dans le cache des noms d'hôte.
Si ce n'est pas le cas, le thread va appeler
gethostbyaddr_r()
et
gethostbyname_r()
pour résoudre le nom de
l'hôte.
Si le système d'opération supporte les fonctions
gethostbyaddr_r()
et
gethostbyname_r()
, compatibles avec les
threads, elles sont utilisées pour la résolution.
Si le système d'exploitation ne supporte pas les appels
précédents, le thread va verrouiller un "mutex" et appeler
gethostbyaddr()
et
gethostbyname()
à la place. Sachez que
dans ce cas, aucun autre thread ne peut résoudre de nom
d'hôte qui n'est pas dans le cache tant que le premier
thread n'a pas fini.
Il est possible de désactiver la recherche du nom par DNS en
démarrant mysqld
avec l'option
--skip-name-resolve
. Dans ce cas, il est
toujours possible d'utiliser les adresses IP dans les tables de
privilèges de MySQL.
Si votre service DNS est très lent et que vous avez beaucoup
d'hôtes, vous pouvez améliorer les performances soit en
désactivant le DNS avec --skip-name-resolve
,
soit en augmentant la taille de
HOST_CACHE_SIZE
(par défaut: 128) et en
recompilant mysqld
.
Il est possible de désactiver le cache de noms d'hôte avec
--skip-host-cache
. Il est possible de vider le
cache des noms d'hôtes avec FLUSH HOSTS
ou
avec mysqladmin flush-hosts
.
Si vous ne voulez pas autoriser les connections par
TCP/IP
, vous pouvez utiliser l'option
--skip-networking
au démarrage de
mysqld
.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.