Mysql Version : 5.1.73
Os Version : Centos 5.9
問題敘述:
今天一個php程序從客戶端連接Mysql被監測到在偶爾的連接過程中報錯,信息如下:
Lost connection to MySQL server at 'reading authorization packet',看到這個錯誤提示,第一想到是客戶端連接不上,服務端本地是否能連接。經驗證,服務端本地是可以連接的,這就松了口氣,一方面有很多任務是跑在Mysql服務端的,如果本地無法連接,會造成大部分程序阻塞;
另一方面,服務端可以連接,那就可以進行相關的查問題。
用show processlist查看連接的時候,發現連接數並不多,此時並發不高,不是並發的問題,但是有個值,很顯眼:
unauthenticated user,和報錯的信息相似,未驗證的用戶。
查了一下相關的資料,給出的解釋是:“unauthenticated user” 是由一個客戶端發起的連接,但是這個客戶端用戶還沒有被認證。這種情況一般在系統負載比較高或者mysql比較繁忙的時候遇到。
看到連接不高,看有可能是負載高也會導致,這個問題,然後看了下機器負載,負載並不高.....
還有個參數也要提一下,就是skip-name-resolve。當客戶端連接上來,服務器端都會對客戶端進來DNS都會進行反查,來獲得客戶端的域名或主機名。而 skip-name-resolve 這個參數的意義就是禁止反向域名解析。然後就懷疑會不會是DNS服務器出了問題,才導致連接驗證用戶出問題。
然後看了下 skip-name-resolve 狀態
此時 skip-name-resolve 參數已經設定了。那這個問題,就可以拿過去不考慮了。
然後發現OS級別的監控外網百兆網卡有流量警報。然後發現了個問題,PHP程序對於Mysql的訪問(每秒會有幾百次的select)全是基於外網,造成了流量過高。然後看了下內網網卡,千兆,呵呵了,果斷把基於外網的訪問挪到內網上來。。。觀察一段時間,連接緩解了,問題沒在發生。。。。。
!記一次網卡造成的Mysql連接異常!