現象:數據庫極慢、連接數飆升、SHOW PROCESSLIST 顯示大量 unauthenticated user、線程狀態為 Reading from net 或 Connecting。根因:DNS 反向解析超時。
無論客戶端用 IP 還是主機名連接,MySQL 默認都會做反解析(除非跳過)。
編輯 /etc/my.cnf(Windows 為 my.ini),[mysqld] 區塊添加:
[mysqld] skip-name-resolve
重啟 MySQL:systemctl restart mysqld 或服務管理器重啟。
| 影響 | 說明 | 應對 |
|---|---|---|
| 主機名顯示為 IP | SHOW PROCESSLIST、performance_schema 的 HOST 列顯示 IP | 運維監控按 IP 識別,無業務影響 |
mysql.user Host 列需用 IP | 授權語句 user@'host' 的 host 必須填 IP 或 %,不能用主機名 | 規範化授權腳本,統一用 IP/通配符 |
| 日誌無主機名 | 錯誤日誌、慢查詢日誌記錄客戶端 IP | 結合應用層日誌(含主機名)關聯分析 |
mysql> SHOW VARIABLES LIKE 'skip_name_resolve'; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | skip_name_resolve | ON | +-------------------+-------+ mysql> SHOW PROCESSLIST; -- Host 列應顯示 IP 地址,無 unauthenticated user 堆積
若並發極高,配合調整:
[mysqld] skip-name-resolve max_connections = 2000 back_log = 500 thread_cache_size = 100
skip-name-resolve 生效(大小寫無關,建議小寫)/etc/hosts 是否有錯誤映射導致本地解析卡頓somaxconn、tcp_max_syn_backlogskip-name-resolve 是解決「unauthenticated user 堆積」的銀彈。生產環境 MySQL 強烈建議默認開啟,以 IP 管理權限,避免 DNS 依賴導致的不可用風險。