本文章來給各位同學介紹MySQL連接的時候出現“too many connection\"錯誤並且啟動時間特別長的解決辦法,有面要了解的朋友可參考。
昨天一台服務器上出現了一個奇怪的問題,正常訪問的時候MySQL出現 "error 1040, too many connection" 錯誤提示,造成這個原因通常是max_connections設置的太小或者wait_timeout的值設置的太長造成連接超時時間太長。所以首先想到的是使用mysqladmin查看max_connections的值為多少
產生這種問題的原因是:
連接數超過了 MySQL 設置的值,與 max_connections 和 wait_timeout 都有關系。wait_timeout 的值越大,連接的空閒等待就越長,這樣就會造成當前連接數越大。
解決方法:
代碼如下 復制代碼1.[root@localhost bin]$ ./mysqladmin -uroot -p variables | grep "max_conn"
輸入數據庫的密碼之後就可以看到max_connections的值,如果太小的話(默認為100)需要將該值設置的大一些。如果MySQL不允許中斷的話可以登錄MySQL之後,然後設置當前max_connections的值
代碼如下 復制代碼1.[root@localhost bin]$ ./mysql -uroot -p
2.mysql> set GLOBAL max_connections=1024;
這裡還需要注意的是Linux下如果系統的max user processes低於max_connections的值會出現“Can't create a new thread (errno 11); ”錯誤,解決方法可以參考MySQL出現Can't create a new thread (errno 11); 的解決辦法。上面的設置只是在當前運行的狀態下有效,如果mysql重啟之後設置失效了,所以終極的方法是修改mysql的配置文件my.cnf,然後在[mysqld]下面設置max_connections的值。
但是奇怪的是這樣設置之後還是依然出現那個錯誤,於是登錄mysql之後使用 show processlist; 命令查看連接,然後使用kill命令刪除了一些Sleep狀態的連接,但是過一會兒又會出現too many connection的錯誤提示。另外我還注意到一個現象,就是MySQL啟動或重啟的時候時間特別長,數據庫大概有2G左右的數據,但是也不至於啟動這麼慢吧?後來想到是不是數據庫文件有問題,於是又使用了修復命令對每個表進行了修復,但是過一兩個小時之後還是會出現上面的錯誤。