Wenn ein neuer Client eine Verbindung mit mysqld herstellt, dann erzeugt mysqld einen neuen Thread, um die Anforderung zu bearbeiten. Dieser Thread überprüft zunächt, ob der Hostname sich im Hostnamens-Cache befindet. Ist dies nicht der Fall, dann versucht der Thread, den Hostnamen aufzulösen:
Wenn das Betriebssystem die Thread-sicheren Aufrufe
gethostbyaddr_r()
und
gethostbyname_r()
unterstützt, führt
der Thread unter ihrer Verwendung die Hostnamensauflösung
durch.
Unterstützt das Betriebssystem die Thread-sicheren Aufrufe
nicht, dann sperrt der Thread ein Mutex und ruft stattdessen
gethostbyaddr()
und
gethostbyname()
auf. In diesem Fall kann
ein anderer Thread Hostnamen, die nicht im Hostnamens-Cache
vorhanden sind, erst auflösen, wenn der erste Thread das
Mutex wieder aufgehoben hat.
Sie können DNS-Lookups für Hostnamen deaktivieren, indem Sie
mysqld mit der Option
--skip-name-resolve
starten. Allerdings können
Sie in diesem Fall nur IP-Adressen in den MySQL-Grant-Tabellen
verwenden.
Wenn Ihr DNS sehr langsam ist und Sie viele Hosts haben, können
Sie die Leistung steigern, indem Sie entweder DNS-Lookups mit
--skip-name-resolve
deaktivieren oder den
HOST_CACHE_SIZE
-Wert (Standard: 128) erhöhen
und mysqld neu kompilieren.
Sie können den Hostnamens-Cache deaktivieren, indem Sie den
Server mit der Option --skip-host-cache
starten. Um den Cache zu leeren, setzen Sie eine FLUSH
HOSTS
-Anweisung ab oder führen den Befehl
mysqladmin flush-hosts aus.
Wenn Sie TCP/IP-Verbindungen vollständig deaktivieren wollen,
starten Sie mysqld mit der Option
--skip-networking
.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.