新聞中心
如何斷開MYSQL數(shù)據(jù)庫連接
兩種常見的斷開方式:
創(chuàng)新互聯(lián)建站是一家專業(yè)提供館陶企業(yè)網(wǎng)站建設,專注與網(wǎng)站設計制作、成都做網(wǎng)站、H5響應式網(wǎng)站、小程序制作等業(yè)務。10年已為館陶眾多企業(yè)、政府機構(gòu)等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設計公司優(yōu)惠進行中。
1 根據(jù)數(shù)據(jù)庫連接字符串設置鏈接生命周期 會自行斷開
2 拿,net環(huán)境舉例 MySQL.Data.MySqlClient類庫下的 MySqlConnection類 下面有個方法 叫 .Close() 即可斷開連接;
訪問MySqlConnection類下的 Statu (只讀的)字段 可以獲得當前連接狀態(tài)
提示 斷開后的連接 可以隨時 根據(jù)需要打開
mysql連接池,池中的數(shù)據(jù)庫連接如何釋放
做到事務去釋放!目前我們處理這1.5億條數(shù)據(jù)就是這樣做的,但是查詢速度太慢啊!
怎樣解決mysql連接過多的錯誤?
1、mysql數(shù)據(jù)庫系統(tǒng)允許的最大可連接數(shù)max_connections。這個參數(shù)是可以設置的。如果不設置,默認是100。最大是16384。
2、數(shù)據(jù)庫當前的連接線程數(shù)threads_connected。這是動態(tài)變化的。
查看max_connections、max_connections的辦法見后。
如果
threads_connected
==
max_connections
時,數(shù)據(jù)庫系統(tǒng)就不能提供更多的連接數(shù)了,這時,如果程序還想新建連接線程,數(shù)據(jù)庫系統(tǒng)就會拒絕,如果程序沒做太多的錯誤處理,就會出現(xiàn)類似強壇的報錯信息。
因為創(chuàng)建和銷毀數(shù)據(jù)庫的連接,都會消耗系統(tǒng)的資源。而且為了避免在同一時間同時打開過多的連接線程,現(xiàn)在編程一般都使用所謂數(shù)據(jù)庫連接池技術(shù)。
但數(shù)據(jù)庫連接池技術(shù),并不能避免程序錯誤導致連接資源消耗殆盡。
這種情況通常發(fā)生在程序未能及時釋放數(shù)據(jù)庫連接資源或其他原因造成數(shù)據(jù)庫連接資源不能釋放,但強壇系統(tǒng)估計不會發(fā)生這種低級的編程錯誤。
該錯誤的簡便的檢查辦法是,在刷新強壇頁面時,不斷監(jiān)視threads_connected的變化。如果max_connections足夠大,而
threads_connected值不斷增加以至達到max_connections,那么,就應該檢查程序了。當然,如果采用數(shù)據(jù)庫連接池技術(shù),
threads_connected增長到數(shù)據(jù)庫連接池的最大連接線程數(shù)時,就不再增長了。
從強壇出錯的情況看,更大的可能性是數(shù)據(jù)庫系統(tǒng)沒能進行適當?shù)嘏渲谩O旅嫣岢鲆稽c建議。供參考
讓你們的工程師把mysql的最大允許連接數(shù)從默認的100調(diào)成32000。這就不會老出現(xiàn)連接過多的問題了。
查看max_connections
進入mysql,用命令:
show
variables
查看數(shù)據(jù)庫最大可連接數(shù)的變量值:
max_connections
查看threads_connected
進入mysql,用命令:
show
status
查看當前活動的連接線程變量值:
threads_connected
設置max_connections
設置辦法是在my.cnf文件中,添加下面的最后紅色的一行:
[mysqld]
port=3306
#socket=mysql
skip-l
java的mysqlhelper類如何釋放連接池
public?ResultSet?SQL_ExecuteQuery(String?sql,Object?[]?p){
Connection?con=openConnection();//打開數(shù)據(jù)庫
PreparedStatement?pst=null;//定義一個?執(zhí)行對象
try?{
pst=con.prepareStatement(sql);//初始化執(zhí)行對象
//循環(huán)設置參數(shù)
if(p!=null??p.length0){
for?(int?i?=?0;?i??p.length;?i++)?{
pst.setObject((i+1),?p[i]);//設置參數(shù)
}
}
//最后執(zhí)行命令??并返回結(jié)果
return?pst.executeQuery();//執(zhí)行命令
}?catch?(SQLException?e)?{
e.printStackTrace();
}finally{
try{pst.close();}catch(SQLException?ex){}
try{con.close();}catch(SQLException?ex){}
}
return?null;
}
百度搞得亂亂的,,,,,
spring連接mysql怎么釋放連接
spring有三種方法與數(shù)據(jù)庫通訊不是?一般使用jdbctemplate。這個類下面有關(guān)閉鏈接的方法,還有一種方法是繼承什么接口。。。不過現(xiàn)在最好的是使用hibernate或者mybite做持久層
MySQL如何殺掉無用連接?
錯誤“Too many connections”。平常碰到這個問題,我基本上是修改/etc/my.cnf的max_connections參數(shù),然后重啟數(shù)據(jù)庫。但
是生產(chǎn)服務器上數(shù)據(jù)庫又不能隨便重啟。
沒辦法,只好想辦法手動去釋放一些沒用的連接。
登陸到MySQL的提示符下,數(shù)據(jù)show processlist這個命令,可以得到所以連接到這個服務器上的MySQL連接:
mysql show processlist;
+---------+------+---------------------+---------+---------+------+-------+-------------------+
| Id | User | Host | db | Command | Time | State | Info |
+---------+------+---------------------+---------+---------+------+-------+-------------------+
| 1180421 | ur | 202.103.96.68:49754 | test1 | Sleep | 1 | | NULL |
| 1180427 | ur | 202.103.96.68:55079 | test2 | Sleep | 1 | | NULL |
| 1180429 | ur | 202.103.96.68:55187 | testdba | Sleep | 0 | | NULL |
| 1180431 | ur | 202.103.96.68:55704 | testdba | Sleep | 0 | | NULL |
| 1180437 | ur | 202.103.96.68:32825 | test1 | Sleep | 1 | | NULL |
| 1180469 | ur | 202.103.96.68:58073 | testdba | Sleep | 0 | | NULL |
| 1180472 | ur | 83.136.93.131:47613 | test2 | Sleep | 8 | | NULL |
| 1180475 | root | localhost | NULL | Query | 0 | NULL | show PROCESSLIST |
+---------+------+---------------------+---------+---------+------+-------+-------------------+
8 rows in set (0.00 sec)
mysql
然后,你可以看到像上面這樣的MySQL數(shù)據(jù)連接列表,而且每一個都會有一個進程ID號(在上表的第一列)。我們只要輸入這樣的命令:
mysql kill 1180421;
Query OK, 0 rows affected (0.00 sec)
mysql
其中1180421為你在進程列表里找到并且要殺掉的進程號。
產(chǎn)生這種問題的原因是:
連接數(shù)超過了 MySQL 設置的值,與 max_connections 和 wait_timeout 都有關(guān)系。wait_timeout 的值越大,連接的空閑等待就越長,這樣就會造成當前連接數(shù)越大。
解決方法:
修改MySQL配置文件/etc/my.cnf,設置成max_connections=1000,wait_timeout=5。如果沒有此項設置可以自行添加,修改后重啟MySQL服務即可。要不經(jīng)常性報此錯誤,則要對服務器作整體性能優(yōu)化
注:
為了防止發(fā)生too many connections時候無法登錄的問題,mysql manual有如下的說明:
mysqld actually allows max_connections+1 clients to connect. The extra connection is reserved for use by accounts that have the SUPER privilege. By granting the SUPER privilege to administrators and not to normal users (who should not need it), an administrator can connect to the server and use SHOW PROCESSLIST to diagnose problems even if the maximum number of unprivileged clients are connected.
因此, 必須只賦予root用戶的SUPER權(quán)限,同時所有數(shù)據(jù)庫連接的帳戶不能賦予SUPER權(quán)限。前面說到的報錯后無法登錄就是由于我們的應用程序直接配置的root用戶
總結(jié),解決問題的最終方法:
1.修改配置文件/etc/my.cnf,調(diào)整連接參數(shù)
2.檢查程序代碼,對于沒有關(guān)閉的鏈接及時進行關(guān)閉
網(wǎng)頁標題:mysql怎么釋放連接 mysql釋放連接數(shù)
網(wǎng)頁URL:http://fisionsoft.com.cn/article/hiodje.html