首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

解決區域網路 MySQL 連線緩慢:DNS 反向解析與 skip-name-resolve 完整方案

     編輯:MySQL 綜合教學

解決區域網路 MySQL 連線緩慢:DNS 反向解析與 skip-name-resolve 完整方案

現象:內網連接另一台 MySQL 伺服器極慢(輸入密碼前等待數十秒),但 ping 該主機極快。根因:**MySQL 預設啟用 DNS 反向解析**,連線時嘗試將客戶端 IP 解析為主機名,DNS 響應慢即導致連線阻塞。

兩大核心解決方案

方案一:修正 DNS 設定(推薦首試)

  • 檢查客戶端與伺服器 /etc/resolv.conf
  • 統一指向響應快速、穩定的 DNS 伺服器
  • 實測:同網段兩機器連同一資料庫速度相差 100 倍,修正 resolv.conf 後瞬間恢復正常

方案二:禁用 MySQL DNS 反向解析(徹底根治)

在 MySQL 配置檔 [mysqld] 區段加入:

[mysqld]
skip-name-resolve

重啟 MySQL 服務即時生效。

官方原理說明

  • 新連線執行緒先查 Hostname Cache
  • 未命中呼叫 gethostbyaddr_r()/gethostbyname_r() 解析
  • 若 OS 不支援執行緒安全版,加鎖呼叫非安全版,**期間其他執行緒無法解析**
  • --skip-name-resolve 直接跳過,**權限表僅能用 IP**
  • 替代:增大 HOST_CACHE_SIZE 重編譯、或 --skip-host-cache 禁用快取、FLUSH HOSTS 清理

副作用與應對

副作用解決方式
無法用 localhost 連線改用 127.0.0.1 或實際 IP
權限表主機名失效GRANT ... TO 'user'@'IP' 或 'user'@'%'

多種環境驗證案例

  • PHP 遠程連接: 4~20 秒 → 加 skip-name-resolve 後「速度像飛一樣」
  • Windows 2003 + MySQL 5: 本機快、一台 Linux 快、另一台慢 → 伺服器端加參數後全快
  • 雙機跨網段: ping 1~2ms 但 PHP 連 MySQL 慢 → my.ini 加參數重啟即解決
最佳實踐: 內網資料庫**優先嘗試修正 DNS**,若 DNS 基礎設施不可控或追求極致效能,**直接開啟 skip-name-resolve 並改用 IP 授權**,一勞永逸。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved