首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 遠程連線極慢?skip-name-resolve 關閉 DNS 反向解析立竿見影

     編輯:MySQL 資料庫相關知識

現象:本機連線毫秒級,遠程連線掛起數秒

同一台 MySQL 伺服器,本機 mysql -u root -p 秒連,遠程客戶端 mysql -h 192.168.x.x -u root -p 需等待 5~10 秒才出現密碼提示。Ping、Telnet 3306 均正常,排除網路延遲。

根因:MySQL 預設對客戶端 IP 做 DNS 反向解析

新連線建立時,MySQL 執行:

  1. 取得客戶端 IP。
  2. 呼叫 gethostbyaddr() 反向解析主機名。
  3. 再呼叫 gethostbyname() 正向解析驗證。
  4. 將主機名與 mysql.user 表 Host 欄位匹配。

若 DNS 伺服器不可達、或無 PTR 記錄、或解析超時,步驟 2~3 會阻塞數秒至數十秒。**開發/測試環境常無法訪問外網 DNS,導致每次連線必須等待解析超時。**

解決:關閉 DNS 反向解析

編輯 my.cnf / my.ini,[mysqld] 區段加入:

[mysqld]
skip-name-resolve

重啟 MySQL:systemctl restart mysqld / net restart MySQL57。

副作用與應對

影響說明應對
mysql.user Host 欄位不能用主機名只能用 IP、CIDR、% 通配符授權語句改用 IP:GRANT ... TO 'user'@'192.168.1.%'
日誌/審計顯示 IP 而非主機名失去可讀性應用層自行關聯 IP→主機名映射表
舊版本 FLUSH HOSTS 清理快取失效快取被禁用無需清理,直接生效

替代方案:調大 Host Cache(不關閉解析)

[mysqld]
# host_cache_size 預設 128,最大 65536(需重新編譯或 8.0+ 動態調整)
host_cache_size = 1024

適合「內網有可靠 DNS、但連線高併發導致解析爭用」場景。但開發環境無 DNS 時,**只能用 skip-name-resolve**。

驗證效果

# 遠程客戶端測試
time mysql -h 192.168.1.100 -u root -p -e "SELECT 1;"
# 應從 ~5s 降至 <0.1s

一行配置、一重啟、立竿見影。將 skip-name-resolve 列入 MySQL 標準化部署清單,專治「連線慢、查詢快」的疑難雜症。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved