錯(cuò)誤“Too many connections”。平常碰到這個(gè)問(wèn)題,我基本上是修改/etc/my.cnf的max_connections參數(shù),然后重啟數(shù)據(jù)庫(kù)。但

為新平等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及新平網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站建設(shè)、做網(wǎng)站、新平網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
是生產(chǎn)服務(wù)器上數(shù)據(jù)庫(kù)又不能隨便重啟。
沒(méi)辦法,只好想辦法手動(dòng)去釋放一些沒(méi)用的連接。
登陸到MySQL的提示符下,數(shù)據(jù)show processlist這個(gè)命令,可以得到所以連接到這個(gè)服務(wù)器上的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ù)連接列表,而且每一個(gè)都會(huì)有一個(gè)進(jìn)程ID號(hào)(在上表的第一列)。我們只要輸入這樣的命令:
mysql kill 1180421;
Query OK, 0 rows affected (0.00 sec)
mysql
其中1180421為你在進(jìn)程列表里找到并且要?dú)⒌舻倪M(jìn)程號(hào)。
產(chǎn)生這種問(wèn)題的原因是:
連接數(shù)超過(guò)了 MySQL 設(shè)置的值,與 max_connections 和 wait_timeout 都有關(guān)系。wait_timeout 的值越大,連接的空閑等待就越長(zhǎng),這樣就會(huì)造成當(dāng)前連接數(shù)越大。
解決方法:
修改MySQL配置文件/etc/my.cnf,設(shè)置成max_connections=1000,wait_timeout=5。如果沒(méi)有此項(xiàng)設(shè)置可以自行添加,修改后重啟MySQL服務(wù)即可。要不經(jīng)常性報(bào)此錯(cuò)誤,則要對(duì)服務(wù)器作整體性能優(yōu)化
注:
為了防止發(fā)生too many connections時(shí)候無(wú)法登錄的問(wèn)題,mysql manual有如下的說(shuō)明:
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í)所有數(shù)據(jù)庫(kù)連接的帳戶不能賦予SUPER權(quán)限。前面說(shuō)到的報(bào)錯(cuò)后無(wú)法登錄就是由于我們的應(yīng)用程序直接配置的root用戶
總結(jié),解決問(wèn)題的最終方法:
1.修改配置文件/etc/my.cnf,調(diào)整連接參數(shù)
2.檢查程序代碼,對(duì)于沒(méi)有關(guān)閉的鏈接及時(shí)進(jìn)行關(guān)閉
1、mysql數(shù)據(jù)庫(kù)系統(tǒng)允許的最大可連接數(shù)max_connections。這個(gè)參數(shù)是可以設(shè)置的。如果不設(shè)置,默認(rèn)是100。最大是16384。
2、數(shù)據(jù)庫(kù)當(dāng)前的連接線程數(shù)threads_connected。這是動(dòng)態(tài)變化的。
查看max_connections、max_connections的辦法見(jiàn)后。
如果
threads_connected
==
max_connections
時(shí),數(shù)據(jù)庫(kù)系統(tǒng)就不能提供更多的連接數(shù)了,這時(shí),如果程序還想新建連接線程,數(shù)據(jù)庫(kù)系統(tǒng)就會(huì)拒絕,如果程序沒(méi)做太多的錯(cuò)誤處理,就會(huì)出現(xiàn)類似強(qiáng)壇的報(bào)錯(cuò)信息。
因?yàn)閯?chuàng)建和銷毀數(shù)據(jù)庫(kù)的連接,都會(huì)消耗系統(tǒng)的資源。而且為了避免在同一時(shí)間同時(shí)打開過(guò)多的連接線程,現(xiàn)在編程一般都使用所謂數(shù)據(jù)庫(kù)連接池技術(shù)。
但數(shù)據(jù)庫(kù)連接池技術(shù),并不能避免程序錯(cuò)誤導(dǎo)致連接資源消耗殆盡。
這種情況通常發(fā)生在程序未能及時(shí)釋放數(shù)據(jù)庫(kù)連接資源或其他原因造成數(shù)據(jù)庫(kù)連接資源不能釋放,但強(qiáng)壇系統(tǒng)估計(jì)不會(huì)發(fā)生這種低級(jí)的編程錯(cuò)誤。
該錯(cuò)誤的簡(jiǎn)便的檢查辦法是,在刷新強(qiáng)壇頁(yè)面時(shí),不斷監(jiān)視threads_connected的變化。如果max_connections足夠大,而
threads_connected值不斷增加以至達(dá)到max_connections,那么,就應(yīng)該檢查程序了。當(dāng)然,如果采用數(shù)據(jù)庫(kù)連接池技術(shù),
threads_connected增長(zhǎng)到數(shù)據(jù)庫(kù)連接池的最大連接線程數(shù)時(shí),就不再增長(zhǎng)了。
從強(qiáng)壇出錯(cuò)的情況看,更大的可能性是數(shù)據(jù)庫(kù)系統(tǒng)沒(méi)能進(jìn)行適當(dāng)?shù)嘏渲谩O旅嫣岢鲆稽c(diǎn)建議。供參考
讓你們的工程師把mysql的最大允許連接數(shù)從默認(rèn)的100調(diào)成32000。這就不會(huì)老出現(xiàn)連接過(guò)多的問(wèn)題了。
查看max_connections
進(jìn)入mysql,用命令:
show
variables
查看數(shù)據(jù)庫(kù)最大可連接數(shù)的變量值:
max_connections
查看threads_connected
進(jìn)入mysql,用命令:
show
status
查看當(dāng)前活動(dòng)的連接線程變量值:
threads_connected
設(shè)置max_connections
設(shè)置辦法是在my.cnf文件中,添加下面的最后紅色的一行:
[mysqld]
port=3306
#socket=mysql
skip-l
1 根據(jù)數(shù)據(jù)庫(kù)連接字符串設(shè)置鏈接生命周期 會(huì)自行斷開
2 拿,net環(huán)境舉例 MySQL.Data.MySqlClient類庫(kù)下的 MySqlConnection類 下面有個(gè)方法 叫 .Close() 即可斷開連接;
訪問(wèn)MySqlConnection類下的 Statu (只讀的)字段 可以獲得當(dāng)前連接狀態(tài)
提示 斷開后的連接 可以隨時(shí) 根據(jù)需要打開!
當(dāng)前題目:怎么釋放mysql連接 mysql怎么斷開連接
本文URL:http://chinadenli.net/article32/hghspc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、手機(jī)網(wǎng)站建設(shè)、、微信小程序、響應(yīng)式網(wǎng)站、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)