mysql은 계정이 최초 로그인할 때 IP를 DNS서버에 맞춰 검증하는 DNS Lookup 과정을 거친다.
모든 접속때마다 DNS Lookup을 하게 되면 부하가 생긴다.
만약 DNS Loockup 하는 부하를 제거하기 위해서는
my.cnf 파일에
[mysqld]
skip_name_resolve
를 통해서 제거할 수도 있다
따라서 Mysql에서는 host_cache 정보를 기록하여, Client PC에 대한 정보를 기록한다. 따라서 host_cache에 이미 DNS정보가 기록되어 있으면 DNS Loockup 과정을 거치지 않는다.
host_cache에는 접속 error에 대한 정보도 기록되는데, 접속실패 혹은 접속후 비 정상적인 종료가 발생하면 error count가 증가한다.
일정 이상의 error count가 발생하면
Host 'host_name' is blocked because of many connection errors.
Unblock with 'mysqladmin flush-hosts'
에러가 발생한다.
이를 해결하기 위해서는 max_connect_errors 값을 증가시키거나,
SET GLOBAL max_connect_errors=10000;
혹은
[mysqld]
max_connect_errors=10000
Flushing the Host Cache 를 통해서 기존 host_cache를 지워준다.
[root@ns ~]# mysqladmin flush-hosts -uroot -p
skip_name_resolve
The MySQL server maintains an in-memory host cache that contains information about clients: IP address, host name, and error information
The server uses the host cache for several purposes:
By caching the results of IP-to-host name lookups, the server avoids doing a Domain Name System (DNS) lookup for each client connection. Instead, for a given host, it needs to perform a lookup only for the first connection from that host.
The cache contains information about errors that occur during the client connection process. Some errors are considered “blocking.” If too many of these occur successively from a given host without a successful connection, the server blocks further connections from that host. The max_connect_errors system variable determines the permitted number of successive errors before blocking occurs.