5.5.5 Как MySQL использует DNS
Когда к mysqld
подключается новый клиент, mysqld
выделяет новый поток
для обработки данного запроса. Этот поток вначале проверяет, имеется ли в
кэше имен хостов имя требуемого хоста. Если нет, то поток вызовет функции
gethostbyaddr_r()
и gethostbyname_r()
, чтобы определить имя хоста.
Если операционная система не обеспечивает вышеописанные вызовы с
поддержкой потоков, то данный поток заблокирует флаг и вызовет вместо
этого функции gethostbyaddr()
и gethostbyname()
. Следует учитывать, что в
таком случае никакой другой поток не сможет определять имена других
хостов, отсутствующих в кэше имен хостов, пока первый поток не будет
готов.
Можно заблокировать поиск DNS хоста, запустив mysqld
с параметром
--skip-name-resolve
. В этом случае, однако, в таблицах привилегий MySQL
можно использовать только IP-адреса.
Если процесс установления DNS очень медленный и хостов очень много, то
можно получить более высокую производительность либо путем блокировки
поиска DNS при помощи --skip-name-resolve
, либо увеличив размер
определения HOST_CACHE_SIZE
(по умолчанию: 128) и перекомпилировав mysqld
.
Заблокировать кэш имен хостов можно с помощью --skip-host-cache
. Можно
также очистить этот кэш с помощью команды FLUSH HOSTS
или mysqladmin
flush-hosts
.
Можно запретить соединения по протоколу TCP/IP, запустив mysqld
с опцией
--skip-networking
.