from : http://blog.csdn.net/phphot/archive/2009/04/29/4134913.aspx
最近發(fā)現(xiàn)兩臺(tái)MySQL server在中午的時(shí)候忽然(很突然的那種)發(fā)飆,不斷的掛掉。重啟mysql也盡是失敗,看mysql的errorlog,只能看到類似如下的信息:
Forcing close of thread 12232 user: 'root'
用mysqladmin 簡(jiǎn)單的監(jiān)控了下mysql的情況:
mysqladmin -uroot -p******** status -i 1
發(fā)現(xiàn)Queries per second avg只有200左右,可以說(shuō)很低,但是Threads 確非常不穩(wěn)定,居然會(huì)瞬間升級(jí)200以上,一般情況下這個(gè)線程這個(gè)值都是不會(huì)高于5的個(gè)位數(shù)!
然后繼續(xù)看
mysqladmin -uroot -p******** processlist
居然有大量的unauthenticated user?? 如下情況
+------+-----------+---------+----+---------+------+-------+------------------+
[root@app028 ~]# mysqladmin -uroot -p************ processlist
+------+-----------+---------+----+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+------+-----------+---------+----+---------+------+-------+------------------+
| 2007 | unauthenticated user | 192.168.4.29:58519 | | Connect | | login | |
| 2008 | unauthenticated user | 192.168.4.29:58553 | | Connect | | login | |
| 2009 | unauthenticated user | 192.168.4.29:58571 | | Connect | | login | |
| 2010 | unauthenticated user | 192.168.4.29:58577 | | Connect | | login | |
| 2011 | unauthenticated user | 192.168.4.29:58579 | | Connect | | login | |
| 2012 | unauthenticated user | 192.168.4.29:58589 | | Connect | | login | |
google了一下,
發(fā)現(xiàn)這算屬M(fèi)ySQL的一個(gè)bug,不管連接是通過(guò)hosts還是ip的方式,MySQL都會(huì)對(duì)DNS做反查,IP到DNS,由于反查的接續(xù)速度過(guò)慢(不管是不是isp提供的dns服務(wù)器的問(wèn)題或者其他原因),大量的查詢就難以應(yīng)付,線程不夠用就使勁增加線程,但是卻得不到釋放,所以MySQL會(huì)“假死”。
解決的方案很簡(jiǎn)單,結(jié)束這個(gè)反查的過(guò)程,禁止任何解析。
打開mysql的配置文件(my.cnf),在[mysqld]下面增加一行:
skip-name-resolve
重新載入配置文件或者重啟MySQL服務(wù)即可。
==================================
看下手冊(cè)中的解釋是:unauthenticated user refers to a thread that has become associated with a client connection but for which authentication of the client user has not yet been done。意即:有一個(gè)線程在處理客戶端的連接,但是該客戶端還沒(méi)通過(guò)用戶驗(yàn)證。
原因可能有:
1、 服務(wù)器在做DNS反響解析,解決辦法有2:
1、) 在 hosts 中添加客戶端ip,如
192.168.0.1 yejr
2、) MySQL啟動(dòng)參數(shù)增加一個(gè)skip-name-resolve,即不啟用DNS反響解析
2、服務(wù)器的線程還處于排隊(duì)狀態(tài),因此可以加大 back_log