開發環境 MySQL 遠程連接極慢,本地連接卻極快,網路 Ping 正常。根因是 MySQL 預設對連接 IP 執行反向 DNS 解析,內網無外網 DNS 導致超時等待。啟用 skip-name-resolve 參數即可徹底解決。
mysql -h localhost 秒連ping、traceroute 網路完全正常MySQL 連接處理流程:
host_cache)gethostbyaddr_r() 反向解析 IP → 主機名gethostbyname_r() 正向解析驗證無外網 DNS 時,第 3 步超時等待 (預設 10-30 秒),導致連接建立極慢。
修改配置文件:
[mysqld]
skip-name-resolve
/etc/my.cnf 或 /etc/mysql/my.cnfmy.ini務必置於 [mysqld] 區塊下,存檔後重啟 MySQL 服務。
啟用後,權限表 mysql.user 的 Host 欄位只能使用 IP 地址,不能使用主機名/域名。
遷移步驟:
SHOW GRANTS FOR 'user'@'hostname';CREATE USER 'user'@'192.168.1.%' IDENTIFIED BY 'pass';GRANT ... TO 'user'@'192.168.1.%';skip-host-cache:禁用主機名快取,每次連接仍解析,不解決根本問題。HOST_CACHE_SIZE (需重編譯):治標不治本。/etc/hosts 映射:維護成本高,不適用動態 IP 環境。「You can disable DNS host lookup by starting mysqld with --skip-name-resolve. In this case you can however only use IP names in the MySQL privilege tables.」
適用於:內網隔離環境、容器化部署、無外網 DNS 的雲主機、高並發連接場景。配置生效後連接建立時間從秒級降至毫秒級。