現象:本地或內網連接 MySQL 極慢(需等待數十秒才提示輸入密碼),但 ping 目標主機極快。根因:**預設啟用 DNS 反向解析**,連線時 MySQL 嘗試將客戶端 IP 解析為主機名,若 DNS 伺服器響應慢或失敗,會嚴重阻塞連線建立。
在 my.cnf(Linux)或 my.ini(Windows)的 [mysqld] 區段加入:
[mysqld]
skip-name-resolve
重啟 MySQL 服務即時生效,連線速度瞬間恢復正常。
gethostbyaddr_r()/gethostbyname_r() 執行反向/正向解析--skip-name-resolve 直接跳過解析,**權限表僅能使用 IP 而非主機名**HOST_CACHE_SIZE(預設 128)並重編譯,或用 --skip-host-cache 禁用快取,FLUSH HOSTS 清理快取localhost 連線:需改用 127.0.0.1 或實際 IPGRANT ... TO 'user'@'hostname' 改為 'user'@'IP' 或 'user'@'%'若不想禁用解析,可檢查 /etc/resolv.conf,確保指向響應快速、穩定的 DNS 伺服器。實測案例:同網段兩機器連同一資料庫,速度相差 100 倍,修正 resolv.conf 指向快速 DNS 後恢復正常。
在 my.ini [mysqld] 加入 skip-name-resolve,重啟服務即可解決 PHP/應用遠程連接 MySQL 緩慢問題。
最佳實踐: 內網資料庫**強烈建議開啟 skip-name-resolve**,配合 IP 白名單授權,兼顧效能與安全。若必須用主機名,請確保 DNS 基礎設施高可用、低延遲。