from : http://blog.csdn.net/phphot/archive/2009/04/29/4134913.aspx

最近發現兩臺MySQL server在中午的時候忽然(很突然的那種)發飆,不斷的掛掉。重啟mysql也盡是失敗,看mysql的errorlog,只能看到類似如下的信息:

Forcing close of thread 12232 user: 'root'

用mysqladmin 簡單的監控了下mysql的情況:

mysqladmin -uroot -p******** status -i 1

發現Queries per second avg只有200左右,可以說很低,但是Threads 確非常不穩定,居然會瞬間升級200以上,一般情況下這個線程這個值都是不會高于5的個位數!

然后繼續看

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了一下,

發現這算屬MySQL的一個bug,不管連接是通過hosts還是ip的方式,MySQL都會對DNS做反查,IP到DNS,由于反查的接續速度過慢(不管是不是isp提供的dns服務器的問題或者其他原因),大量的查詢就難以應付,線程不夠用就使勁增加線程,但是卻得不到釋放,所以MySQL會“假死”。

解決的方案很簡單,結束這個反查的過程,禁止任何解析。

打開mysql的配置文件(my.cnf),在[mysqld]下面增加一行:

skip-name-resolve

重新載入配置文件或者重啟MySQL服務即可。


==================================

看下手冊中的解釋是: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。意即:有一個線程在處理客戶端的連接,但是該客戶端還沒通過用戶驗證。
原因可能有:
1、        服務器在做DNS反響解析,解決辦法有2:
1、) 在 hosts 中添加客戶端ip,如
192.168.0.1  yejr
2、) MySQL啟動參數增加一個skip-name-resolve,即不啟用DNS反響解析
2、服務器的線程還處于排隊狀態,因此可以加大 back_log