Mysql DNS反向解析導(dǎo)致連接超時(shí)過(guò)程分析(skip-name-resolve)_MySQL教程
推薦:mysql 無(wú)法連接問(wèn)題的定位和修復(fù)過(guò)程分享開發(fā)的一款網(wǎng)站防護(hù)產(chǎn)品中出現(xiàn)了一個(gè)客戶端上安裝后Mysql每隔一段時(shí)間就出現(xiàn)問(wèn)題,這個(gè)問(wèn)題是客戶反饋的,所以需要去復(fù)現(xiàn)和定位
MySQL數(shù)據(jù)庫(kù)收到一個(gè)網(wǎng)絡(luò)連接后,首先拿到對(duì)方的IP地址,然后對(duì)這個(gè)IP地址進(jìn)行反向DNS解析從而得到這個(gè)IP地址對(duì)應(yīng)的主機(jī)名。用主機(jī)名在權(quán)限系統(tǒng)里面進(jìn)行權(quán)限判斷。反向DNS解析是耗費(fèi)時(shí)間的,有可能讓用戶感覺起來(lái)很慢。甚至有的時(shí)候,反向解析出來(lái)的主機(jī)名并沒(méi)有指向這個(gè)IP地址,這時(shí)候就無(wú)法連接成功了。可以在配置文件里面禁止MySQL進(jìn)行反向DNS解析,只需在my.cnf的[mysqld]段落中加入如下行即可:
skip-name-resolve (windows與linux下一樣的)
設(shè)備在連接mysql時(shí)候,等待服務(wù)器的banner信息需要4s左右,影響了Mysql服務(wù)的連接速度。
通過(guò)如下方式進(jìn)行驗(yàn)證:
1、Telnet端口驗(yàn)證
通過(guò)設(shè)備和虛擬機(jī)(Linux系統(tǒng))分別Telnet Mysql服務(wù)的端口,會(huì)出現(xiàn)一下現(xiàn)象:
設(shè)備(UAG/SCANNER): telnet后,等待Mysql的服務(wù)器端回應(yīng)大概需要等10s左右。
[DPtech-Developer-Shell]telnet 10.101.0.206 3308
Trying 10.101.0.206...
Connected to 10.101.0.206.
Escape character is '^]'.
E
5.0.67-community-nt-log?Hc95
虛擬機(jī)(Ubuntu):telnet后,立即得到了Mysql服務(wù)器的返回
[root]~# telnet 10.101.0.206 3308
Trying 10.101.0.206...
Connected to 10.101.0.206.
Escape character is '^]'.
E
5.0.67-community-nt-log?D%(;1$]+,¢!Zdh`'?G)6r]YConnection closed by foreign host. //這里耗時(shí)很短
2、通過(guò)程序進(jìn)行驗(yàn)證
具體源代碼見附件:驗(yàn)證程序源代碼
源代碼基本上是設(shè)置了Recv超時(shí)后,建立socket連接之后接受數(shù)據(jù),收到后計(jì)時(shí)并輸出。
在設(shè)備上和虛擬機(jī)中的結(jié)果分別如下:
設(shè)備:
[DPtech-Developer-Shell]/tcpclient_mips 10.101.0.1 3306
花費(fèi)時(shí)間:19553
Recved 68 bytes
@
5.5.2-m2-community%uD3q`n)
虛擬機(jī):
[root]tcp_demo# ./tcpclient 10.101.0.1 3306
花費(fèi)時(shí)間:10525
Recved 68 bytes
@
5.5.2-m2-communitd~k~Y";B
可以發(fā)現(xiàn),設(shè)備上大約比Linux服務(wù)器多耗時(shí)9s,其中10秒鐘可能是recv本身超時(shí)的時(shí)間。
3、通過(guò)不同操作系統(tǒng)進(jìn)行Telnet驗(yàn)證
通過(guò)Windows系統(tǒng)和Linux虛擬機(jī)、設(shè)備,分別通過(guò)Telnet進(jìn)行連接嘗試,通過(guò)抓包分析得知,只有設(shè)備的耗時(shí)比較長(zhǎng),其他的耗時(shí)都比較短。
抓包時(shí)發(fā)現(xiàn)設(shè)備中的socket建立之后,MYSQL服務(wù)器需要發(fā)送很多次的NBNS報(bào)文后,才會(huì)傳輸banner信息,而Linux虛擬機(jī)和Windows系統(tǒng)的主機(jī)在這個(gè)過(guò)程中都沒(méi)有出現(xiàn)這個(gè)問(wèn)題。
查找了一些資料,關(guān)于MYSQL NBNS報(bào)文的問(wèn)題:
Mysql論壇的提問(wèn):
該問(wèn)題的答復(fù)
從答復(fù)中來(lái)看,貌似是某些版本的問(wèn)題,臨時(shí)的解決方案是對(duì)Mysql服務(wù)器進(jìn)行配置,不啟用Named Pipes,即 命名管道 功能即可解決這個(gè)問(wèn)題。
后經(jīng)查找相關(guān)資料得知,遠(yuǎn)程連接超時(shí)可能由于Mysql默認(rèn)開啟了DNS反向解析的緣故,每次連接時(shí)服務(wù)器都嘗試解析連接客戶端的主機(jī)名,導(dǎo)致時(shí)間比較長(zhǎng)。
解決方法是在服務(wù)器端的my.ini文件中,[mysqld]這個(gè)節(jié)下配置一個(gè)skip-name-resolve以關(guān)閉Mysql默認(rèn)開啟的DNS反向解析就可以了。
再次通過(guò)設(shè)備和虛擬機(jī)或者Windows系統(tǒng)進(jìn)行Telnet,可以發(fā)現(xiàn)連接超時(shí)的現(xiàn)象明顯不存在了。
另外通過(guò)自己寫的C代碼進(jìn)行連接的時(shí)候也存在同樣的問(wèn)題,修改skip-name-resolve以后,實(shí)際上就可以發(fā)現(xiàn)該問(wèn)題已經(jīng)不存在了:
設(shè)備:
[DPtech-Developer-Shell]/tcpclient_mips 10.101.0.1 3306
花費(fèi)時(shí)間:10520
Recved 68 bytes
@
5.5.2-m2-community[Z44E>G)
虛擬機(jī):
[root]tcp_demo# ./tcpclient 10.101.0.1 3306
花費(fèi)時(shí)間:10521
Recved 68 bytes
@
5.5.2-m2-community7evE5wyx
通過(guò)虛擬機(jī)Telnet連接另外一個(gè)ip 10.101.0.206時(shí)候發(fā)現(xiàn)速度也比較慢,消耗的時(shí)間基本上和設(shè)備中相當(dāng),可能是由于虛擬機(jī)和宿主主機(jī)之前不需要進(jìn)行反向域名解析,或者說(shuō)是應(yīng)為系統(tǒng)本身就知道虛擬機(jī)IP地址(NAT模式)對(duì)應(yīng)的主機(jī)名,所以不需要進(jìn)行DNS反向解析,導(dǎo)致在虛擬機(jī)中出現(xiàn)了特殊情況。
最后得出結(jié)論,可能這個(gè)問(wèn)題實(shí)際上和設(shè)備或者虛擬機(jī),Linux系統(tǒng)、Windows系統(tǒng)沒(méi)有多大關(guān)系,主要由于服務(wù)器的反向DNS解析導(dǎo)致該問(wèn)題。無(wú)法從客戶端途徑去解決,也就是說(shuō)我們?cè)O(shè)備無(wú)法處理這種情形。
分享:通過(guò)mysqladmin遠(yuǎn)程管理mysql的方法在一些特殊場(chǎng)景下,想要遠(yuǎn)程重啟mysql,以便讓某些修改能及時(shí)的生效,但是mysql并沒(méi)有提供遠(yuǎn)程重啟的功能,唯一能做的就是遠(yuǎn)程關(guān)閉mysql服務(wù)
- MSSQL清空日志刪除日志文件
- 關(guān)于數(shù)據(jù)庫(kù)中保留小數(shù)位的問(wèn)題
- 解析mysql與Oracle update的區(qū)別
- mysql 導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)以及函數(shù)、存儲(chǔ)過(guò)程的介紹
- MySQL——修改root密碼的4種方法(以windows為例)
- 解決MYSQL出現(xiàn)Can''t create/write to file ''#sql_5c0_0.MYD''的問(wèn)題
- 深入理解SQL的四種連接-左外連接、右外連接、內(nèi)連接、全連接
- 解析:內(nèi)聯(lián),左外聯(lián),右外聯(lián),全連接,交叉連接的區(qū)別
- mysql出現(xiàn)“Incorrect key file for table”處理方法
- mysql重裝后出現(xiàn)亂碼設(shè)置為utf8可解決
- 淺析一個(gè)MYSQL語(yǔ)法(在查詢中使用count)的兼容性問(wèn)題
- 解析MySQL中INSERT INTO SELECT的使用
MySQL教程Rss訂閱編程教程搜索
MySQL教程推薦
- 解析mysql與Oracle update的區(qū)別
- 網(wǎng)站數(shù)據(jù)多了分頁(yè)慢該怎么辦?
- sql語(yǔ)句:SQLServer字段排序(按筆畫,拼音,拼音首字母)
- 網(wǎng)站模板:SQL2005CLR函數(shù)擴(kuò)展 - 關(guān)于山寨索引
- 解析:內(nèi)聯(lián),左外聯(lián),右外聯(lián),全連接,交叉連接的區(qū)別
- mysql創(chuàng)建新用戶的命令
- mysql常用監(jiān)控腳本命令整理
- 網(wǎng)頁(yè)模板MySQL出現(xiàn)Can't create/write to file 'C:\Windows\TEMP\#sql_990_0.MYI解決辦法
- jdbc調(diào)用mysql存儲(chǔ)過(guò)程實(shí)現(xiàn)代碼
- Mysql高性能備份方案解決數(shù)據(jù)不間斷訪問(wèn)
猜你也喜歡看這些
- 防范sql注入式攻擊js版本
- 精通數(shù)據(jù)庫(kù)系列之入門——基礎(chǔ)篇1
- 刪除數(shù)據(jù)庫(kù)中重復(fù)數(shù)據(jù)的幾個(gè)方法
- 微軟已證實(shí)最新的關(guān)鍵SQL Server漏洞
- MSSQL 2008不能用IP登錄問(wèn)題如何解決
- SQL2008定時(shí)任務(wù)作業(yè)創(chuàng)建教程
- SQL Server 2008 安裝和配置圖解教程(附官方下載地址)
- SQL Server2005的XML數(shù)據(jù)類型之基礎(chǔ)篇
- SQL SERVER 2008數(shù)據(jù)庫(kù)引擎詳細(xì)介紹
- 解析SQL 2008的Change Data Capture功能
- 相關(guān)鏈接:
復(fù)制本頁(yè)鏈接| 搜索Mysql DNS反向解析導(dǎo)致連接超時(shí)過(guò)程分析(skip-name-resolve)
- 教程說(shuō)明:
MySQL教程-Mysql DNS反向解析導(dǎo)致連接超時(shí)過(guò)程分析(skip-name-resolve)
。