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

MySQL 遠端連線緩慢根因:skip-name-resolve 關閉 DNS 反解析優化

     編輯:MySQL 資料庫相關知識

現象:應用程式遠端連線 MySQL 極慢 (數秒至數十秒),但本機連線正常、網路延遲低、查詢本身快。根因:**MySQL 預設啟用 DNS 反向解析**,每次新連線嘗試將客戶端 IP 解析為主機名,用於權限表 mysql.user 的 Host 欄位匹配與日誌記錄。若 DNS 伺服器無回應、超時或無 PTR 記錄,連線建立會阻塞等待解析完成。

解決方案:關閉 DNS 反解析

在配置檔 [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 PROCESSLISTHost 欄顯示 IP:port監控工具解析邏輯調整
效能連線建立延遲 **從秒級降至毫秒級**高併發短連線場景效果顯著

驗證生效

mysql -h 192.168.1.50 -u app_user -p -e "SHOW PROCESSLIST;"
-- Host 欄應顯示 192.168.1.100:xxxxx 而非主機名

替代方案 (若必須保留主機名權限)

  1. 本機 /etc/hosts 對應:在 MySQL 伺服器 /etc/hosts 加入客戶端 IP 與主機名映射,避免查詢外部 DNS。
  2. 內部 DNS 伺服器:架設內網 DNS,確保 PTR 記錄存在、TTL 合理、解析 < 10ms。
  3. 連線池複用:應用層使用 HikariCP 等連線池,減少新建連線次數,間接降低 DNS 解析頻率。

最佳實務建議

  • **生產環境強烈建議啟用 skip-name-resolve**,除非有強制合規需求記錄主機名。
  • 帳號管理統一用 **IP/CIDR/%**,棄用主機名。
  • 配合 performance_schema.host_cache 監控連線主機狀態 (8.0+)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved