Mysql DNS反向解析導致連線超時

2021-06-20 01:12:49 字數 2411 閱讀 4447

mysql資料庫收到乙個網路連線後,首先拿到對方的ip位址,然後對這個ip位址進行反向dns解析從而得到這個ip位址對應的主機名。用主機名在許可權系統裡面進行許可權判斷。反向dns解析是耗費時間的,有可能讓使用者感覺起來很慢。甚至有的時候,反向解析出來的主機名並沒有指向這個ip位址,這時候就無法連線成功了。 

可以在配置檔案裡面禁止mysql進行反向dns解析,只需在my.cnf的[

mysql

d]段落中加入如下行即可: 

skip-name-resolve (windows與linux下一樣的)

裝置在連線mysql時候,等待伺服器的banner資訊需要4s左右,影響了mysql服務的連線速度。

通過如下方式進行驗證:

1、telnet埠驗證

通過裝置和虛擬機器(linux系統)分別telnet mysql服務的埠,會出現一下現象:

裝置(uag/scanner): telnet後,等待mysql的伺服器端回應大概需要等10s左右。

[dptech-developer-shell]telnet 10.101.0.206 3308

trying 10.101.0.206...

connected to 10.101.0.206.

escape character is '^]'.

e5.0.67-community-nt-log?hc95

虛擬機器(ubuntu):telnet後,立即得到了mysql伺服器的返回

[root]~# telnet 10.101.0.206 3308

trying 10.101.0.206...

connected to 10.101.0.206.

escape character is '^]'.

e5.0.67-community-nt-log?d%(;1$]+,¢!zdh`'?g)6r]yconnection closed by foreign host. //這裡耗時很短

2、通過程式進行驗證

具體源**見附件:驗證程式源**

源**基本上是設定了recv超時後,建立socket連線之後接受資料,收到後計時並輸出。

在裝置上和虛擬機器中的結果分別如下:

裝置:虛擬機器:

可以發現,裝置上大約比linux伺服器多耗時9s,其中10秒鐘可能是recv本身超時的時間。

3、通過不同作業系統進行telnet驗證

通過windows系統和linux虛擬機器、裝置,分別通過telnet進行連線嘗試,通過抓包分析得知,只有裝置的耗時比較長,其他的耗時都比較短。

抓包時發現裝置中的socket建立之後,mysql伺服器需要傳送很多次的nbns報文後,才會傳輸banner資訊,而linux虛擬機器和windows系統的主機在這個過程中都沒有出現這個問題。

查詢了一些資料,關於mysql nbns報文的問題:

mysql論壇的提問:

該問題的答覆 

從答覆中來看,貌似是某些版本的問題,臨時的解決方案是對mysql伺服器進行配置,不啟用named pipes,即 命名管道 功能即可解決這個問題。

後經查詢相關資料得知,遠端連線超時可能由於mysql預設開啟了dns反向解析的緣故,每次連線時伺服器都嘗試解析連線客戶端的主機名,導致時間比較長。

解決方法是在伺服器端的my.ini檔案中,[mysqld]這個節下配置乙個skip-name-resolve以關閉mysql預設開啟的dns反向解析就可以了。

再次通過裝置和虛擬機器或者windows系統進行telnet,可以發現連線超時的現象明顯不存在了。

另外通過自己寫的c**進行連線的時候也存在同樣的問題,修改skip-name-resolve以後,實際上就可以發現該問題已經不存在了:

裝置:通過虛擬機器telnet連線另外乙個ip 10.101.0.206時候發現速度也比較慢,消耗的時間基本上和裝置中相當,可能是由於虛擬機器和宿主主機之前不需要進行反向網域名稱解析,或者說是應為系統本身就知道虛擬機器ip位址(nat模式)對應的主機名,所以不需要進行dns反向解析,導致在虛擬機器中出現了特殊情況。

最後得出結論,可能這個問題實際上和裝置或者虛擬機器,linux系統、windows系統沒有多大關係,主要由於伺服器的反向dns解析導致該問題。無法從客戶端途徑去解決,也就是說我們裝置無法處理這種情形。

出現這個原因其實是mysql本身存在的乙個問題,即反向解析問題。不管你是使用網域名稱還是ip連線資料庫,mysqld都會做乙個反向解析的過程,即從ip->dns的反查,反查的過程是很慢的而且是受isp控制,所以一旦有大量的反查要求而又無法及時響應就會出現前面所說的

unauthenticated user,

而且mysql會出現停頓狀態。

在做這個設定的之前一定要檢查系統,將所有連線改寫為ip連線,因為一旦此設定生效,mysql是無法進行網域名稱解析的,原有的網域名稱連線將全部失效。

mysql dns反解析的問題

最近發現新專欄的資料庫連線非常慢,登陸mysql資料庫 mysql show processlist 20681949 unauthenticated user 10.10.4.193 52497 null connect reading from net null 20681948 unauthe...

mysql反向解析導致連線慢的問題

公司的乙個系統使用mysql資料庫,區域網內訪問時連線速度很慢,每次都要過十幾秒後才能連上,只要連線上了速度正常。在網上查了一下,發現了mysql有乙個 反向解析 的問題 安裝mysql後,預設 反向解析是開啟的。不管你是使用網域名稱還是 ip連線資料庫,mysqld都會做乙個反向解析的過程,即從 ...

url 反向解析

1 定義 隨著功能的增加會出現更多的檢視,可能之前配置的正規表示式不夠準確,於是就要修改正規表示式,但是正規表示式一旦修改了,之前所有對應的超連結都要修改,真是一件麻煩的事情,而且可能還會漏掉一些超連結忘記修改,有辦法讓鏈結根據正規表示式動態生成嗎?就是用反向解析的辦法。2,應用範圍 模板中的超連結...