現象:應用程式遠端連線 MySQL 極慢 (數秒至數十秒),但本機連線正常、網路延遲低、查詢本身快。根因:**MySQL 預設啟用 DNS 反向解析**,每次新連線嘗試將客戶端 IP 解析為主機名,用於權限表 mysql.user 的 Host 欄位匹配與日誌記錄。若 DNS 伺服器無回應、超時或無 PTR 記錄,連線建立會阻塞等待解析完成。
在配置檔 [mysqld] 區段加入:
[mysqld]
skip-name-resolve
重啟服務:systemctl restart mysqld / net stop mysql && net start mysql。
| 項目 | 變更 | 應對 |
|---|---|---|
| 權限表 Host 欄位 | **不再解析 IP → 主機名**,直接用 IP 匹配 | 帳號建立時 Host **必須用 IP 或 %**,不能用主機名 (如 'user'@'app-server' 將永遠無法匹配) |
| 錯誤日誌/一般日誌 | 顯示客戶端 IP 而非主機名 | 日誌分析腳本需適應 IP 格式 |
| SHOW PROCESSLIST | Host 欄顯示 IP:port | 監控工具解析邏輯調整 |
| 效能 | 連線建立延遲 **從秒級降至毫秒級** | 高併發短連線場景效果顯著 |
mysql -h 192.168.1.50 -u app_user -p -e "SHOW PROCESSLIST;"
-- Host 欄應顯示 192.168.1.100:xxxxx 而非主機名
/etc/hosts 加入客戶端 IP 與主機名映射,避免查詢外部 DNS。skip-name-resolve**,除非有強制合規需求記錄主機名。performance_schema.host_cache 監控連線主機狀態 (8.0+)。