skip_name_resolve=ON 禁用 MySQL 服務端對客戶端 IP 的 DNS 反向解析(含主機名解析)。
MySQL 在內存維護 Host Cache,記錄:IP、Hostname、錯誤計數、驗證標誌。用於:
max_connect_errors 封禁 IPIP=客戶端IP, Host=NULL, HOST_VALIDATED=FALSEHOST_VALIDATED=FALSE → 嘗試 DNS 解析 IP→HostnameHost=主機名, HOST_VALIDATED=TRUE;不一致/失敗 → 標記永久/臨時失敗| 優點 | 缺點 |
|---|---|
| 主機名授權一次生效,IP 變動無需改權限 | 新連接首次需 DNS 解析,延遲敏感場景有影響 |
| 失敗計數防暴力破解(配合 max_connect_errors) | 大量客戶端 IP 會擠佔 cache(LRU 淘汰),導致重複解析 |
SET GLOBAL max_connect_errors = 2;
-- 模擬中斷連接
telnet host 3306 # 連上立即斷開,重複 2 次
-- 再次正常連接
mysql -h host -uroot -p
ERROR 1129 (HY000): Host 'x.x.x.x' is blocked because of many connection errors
解封方式:FLUSH HOSTS; / mysqladmin flush-hosts / TRUNCATE performance_schema.host_cache; / 等待 LRU 淘汰。
root@'mysql-slave1' 無法登錄[Warning] 'user' entry 'root@mysql-slave1' ignored in --skip-name-resolve mode.root@192.168.x.x(IP 而非主機名)% 授權
mysql> \s
Connection: 192.168.1.100 via TCP/IP -- 或 Localhost via UNIX socket
SET GLOBAL host_cache_size = 0; -- 動態生效,無需重啟
[mysqld]
skip-networking # 僅允許本地 Socket 連接
skip_name_resolve,改用 IP/% 授權host_cache_size、監控 DNS 延遲