5.5.5 Как MySQL использует DNS
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.