1. 程式人生 > >Data source rejected establishment of connection, message from server: "Too many connections"

Data source rejected establishment of connection, message from server: "Too many connections"

重新 並發 登錄用戶 -c https 但是 ces 部署 ins

詳細錯誤信息:

Caused by: com.MySQL.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)..............................

問題分析:

查看MySQL的當前最大連接數,登錄MySQL:mysql -uroot -p,回車;輸入密碼,回車;

輸入命令:select VARIABLE_VALUE from information_schema.GLOBAL_VARIABLES where VARIABLE_NAME=‘MAX_CONNECTIONS‘; 回車

顯示當前最大連接數為:151,之前通過文章“CentOS下mysql最大連接數設置 1040 too many connection”中的方法設置為3600了,現在怎麽又變成151了?原來這個方法只是臨時的修改了最大連接數,重新啟動MySQL服務後就還原了。

解決問題:

要徹底解決問題還是要修改my.cnf配置文件,這裏使用VI來修改,輸入命令:vi /usr/my.cnf 回車;打開文件後按“i”鍵進入編輯狀態;

在“[mysqld]”下面添加“max_connections=3600”,按Esc鍵進入命令模式,輸入“:wq”回車(保存並退出)。

執行:service mysql restart 重新啟動MySQL服務;啟動服務的時間可能有點長,耐心等待……

註意:很多文章中提到在“[mysqld]”下面添加“set-variable=max_connections=1000”,根本不行,加了之後服務就啟動不了了。

我這的環境是:CentOS 6.5 MySQL 5.6

錯誤原因:

太多的連接數,登錄用戶過多,配置的mysql連接數過小,或者某些連接沒有關閉,導致連接數過大。

問題的解決:

修改mysql的my.ini配置文件,網上的說法:mysql安裝目錄下的my.ini中設定的並發連接數太少或者系統繁忙導致連接數被占滿。

而項目實際上部署在linux系統上,需要找到my.cnf的配置文件,一般在etc/my.cnf,找到這個文件,添加如下行:

set-variable=max_connections=1000
set-variable=max_user_connections=500

set-variable=wait_timeout=200

之後重啟mysql,生效。

net stop mysql

net start mysql

max_connections: 為設置最大的連接數

max_user_connections:設置每用戶最大的 連接數500

wait_timeout:表示200秒後將關閉空閑連接,但對正在工作的連接不受影響。

//重新啟動MySQL後使用下面的命令查看修改是否成功

# mysqladmin -uroot -p variables

Password:

//可以看到以下項說明修改成功

| max_connections | 1000

| max_user_connections | 500

| wait_timeout | 200

解決方法二:

還有一個可能就是代碼裏打開了太多的連接,但是忘記了在finally塊裏面關閉,從而導致在處理大數據的時候,拋出異常。下面這樣的代碼就不會有異常了。

try{			
      conn=Good.getConnection();
        stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE
   				, ResultSet.CONCUR_UPDATABLE);
      String sql1="insert into cat_garbage values(‘"+rs.getInt("id")+"‘,‘"+rs.getInt("cid")+"‘,‘"+rs.getString("name")+"‘,‘"+rs.getString("keyword")+"‘)";
    stmt.executeUpdate(sql1);
    }
    catch(SQLException|ClassNotFoundException|IOException e)
    {
      e.printStackTrace();
    }
    finally
    {
      if(stmt!= null) 
        stmt.close(); 		
      if(conn!= null) 
        conn.close(); 
    }
要隨時記住關閉rs,stmt,conn等資源,學會使用finally,在finally中,這些語句一定會執行


How to increase MySQL connections(max_connections)?

Q: Every socket of MySQL Database will have defaults connections as 100 but I am looking for any way to increase the number of possible connections > 100 to a socket connection of MySQL Database.??

A:

If you need to increase MySQL Connections without MySQL restart do like below

mysql> show variables like ‘max_connections‘;
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 100   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> SET GLOBAL max_connections = 150;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like ‘max_connections‘;
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 150   |
+-----------------+-------+
1 row in set (0.00 sec)

These settings will change at MySQL Restart.


For permanent changes add below line in my.cnf and restart MySQL

max_connections = 150



Data source rejected establishment of connection, message from server: "Too many connections"