MySQL: Too many connections

aaqwsh發表於2011-06-17

mysql  error Too many connections

今天中午,監控說有臺mysql伺服器連不上,登陸檢查:
mysqladmin -u  -p processlist
mysqladmin: connect to server at 'localhost' failed
error: 'Too many connections'

同時,發現3306埠有很多連線:
netstat -anp
tcp        0      0 1.1.1.2:3306              1.1.1.52:42886            ESTABLISHED -                  
tcp        0      0 1.1.1.2:3306              1.1.1.52:42887            ESTABLISHED -                  
tcp        0      0 1.1.1.2:3306              1.1.1.52:42884            ESTABLISHED -                  
tcp        0      0 1.1.1.2:3306              1.1.1.1:40008             ESTABLISHED -                  
tcp        0      0 1.1.1.2:3306              1.1.1.57:39863            TIME_WAIT   -                  
tcp        0      0 1.1.1.2:3306              1.1.1.57:39862            TIME_WAIT   -                  
tcp        0      0 1.1.1.2:3306              1.1.1.57:39861            TIME_WAIT   -                  
tcp        0      0 1.1.1.2:3306              1.1.1.57:39860            TIME_WAIT   -                  
tcp        0      0 1.1.1.2:3306              1.1.1.57:39859            TIME_WAIT   -                  
tcp        0      0 1.1.1.2:3306              1.1.1.57:39858            TIME_WAIT   -                  
tcp        0      0 1.1.1.2:3306              1.1.1.57:39857            TIME_WAIT   -                  
tcp        0      0 1.1.1.2:3306              1.1.1.57:39856            TIME_WAIT   -                  
tcp        0      0 1.1.1.2:3306              1.1.1.57:39871            TIME_WAIT   - 

如果是oracle ,ps -ef 可以找到一個(LOCAL=NO)的程式,然後,kill -9,但是mysql 是多執行緒伺服器,
只有一個通過mysqld_safe啟動的mysqld程式。因為時間緊迫,只能kill 了上述兩個程式。
然後通知開發控制每臺機器的連線數,調整應用,同時也調整了最大連線數

網上找到一個處理的文章:

MySQL: Too many connections

2010-09-28  |  07:10分類:MySQL  |  標籤:MySQL  |  1,654 views

$mysql -uroot
ERROR 1040 (00000): Too many connections

上面的錯誤,估計很多人都遇到過,Aurimas MikalauskasMySQL Performance Blog已經提到了一個解決辦法(生產環境慎用之):

$gdb -p $(cat data/mysql_sandbox5087.pid) \
-ex "set max_connections=5000" -batch

上面提到的只是一個救火的辦法,MySQL提供了另一個辦法,可以一定程度上避免上述問題。

MySQL提供了引數max_connections控制最大連線數,這包括所有使用者的連線數。MySQL還提供了另一個引數max_user_connections,用來控制某個使用者的最大連線數。例如,將該引數設定為50,那麼對於任何一個使用者(包括super許可權的使用者),最多隻能建立50個連線。

於是我們可以制定下面的策略:如果的MySQL3個使用者(不包括root),將max_user_connections設定為300max_connections設定為1000。配置檔案:

max_connections = 1000
max_user_connections=300

那麼因為只有3個使用者,單個使用者的最大連線數是300,那麼正常最多就只有900個連線,也就總會有100個額外的連線給root來使用。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/758322/viewspace-700127/,如需轉載,請註明出處,否則將追究法律責任。

相關文章