超出MySQL最大連接數(shù)的問(wèn)題怎么解決

超出mysql最大連接數(shù)的問(wèn)題怎么解決

本文講解"超出mysql最大連接數(shù)的問(wèn)題如何解決",希望能夠解決相關(guān)問(wèn)題。

超出mysql最大連接數(shù)問(wèn)題

如果遇到mysq連接數(shù)超出最大限制了,不要慌,往下看:

通常,mysql的最大連接數(shù)默認(rèn)是100, 最大可以達(dá)到16384。

查看最大連接數(shù)

show?variables?like?'%max_connections%';

修改最大連接數(shù)

方法一:修改配置文件。推薦方法一

進(jìn)入mysql安裝目錄 打開(kāi)mysql配置文件 my.ini 或 my.cnf查找 max_connections=100 并將其修改為

max_connections=1000 然后再服務(wù)里重起mysql服務(wù)即可.

方法二:命令行修改。不推薦方法二

命令行登錄mysql后。設(shè)置新的mysql最大連接數(shù)為200:

mysql>?set?global?max_connections=200

如果已經(jīng)連接不上了,先重啟mysql服務(wù)后再進(jìn)行上述操作即可。

這種方式有個(gè)問(wèn)題,就是設(shè)置的最大連接數(shù)只在mysql當(dāng)前服務(wù)進(jìn)程有效,一旦mysql重啟,又會(huì)恢復(fù)到初始狀態(tài)。因?yàn)閙ysql啟動(dòng)后的初始化工作是從其配置文件中讀取數(shù)據(jù)的,而這種方式?jīng)]有對(duì)其配置文件做更改。

mysql最大連接數(shù),timeout配置

mysql連接數(shù)配置

1.mysql的max_connections參數(shù)用來(lái)設(shè)置最大連接(用戶)數(shù)。每個(gè)連接mysql的用戶均算作一個(gè)連接,max_connections的默認(rèn)值為100左右

1.1查看數(shù)據(jù)庫(kù)配置的最大連接數(shù)

show?variables?like?"max_connections";

可以使用navicat或者cmd進(jìn)行命令查詢

超出mysql最大連接數(shù)的問(wèn)題怎么解決

超出mysql最大連接數(shù)的問(wèn)題怎么解決

1.2如果實(shí)際情況中的最大連接數(shù)超過(guò),就會(huì)提示timeout超出最大請(qǐng)求數(shù)

這是我們需要進(jìn)行配置項(xiàng)的修改

設(shè)置調(diào)整最大連接數(shù)

set?global?max_connections?=?1000;

超出mysql最大連接數(shù)的問(wèn)題怎么解決

mysql的連接線程池

1.查看mysql數(shù)據(jù)庫(kù)當(dāng)前的所有連接線程

show?full?processlist;

超出mysql最大連接數(shù)的問(wèn)題怎么解決

圖片中可以看到當(dāng)前數(shù)據(jù)庫(kù)的連接線程情況 。其中發(fā)現(xiàn)很多的線程都是sleep狀態(tài),這個(gè)下面講到的timeout配置會(huì)進(jìn)行管理sleep線程。

mysql timeout配置

查看mysql的timeout配置

show?global?variables?like?'%timeout%';

超出mysql最大連接數(shù)的問(wèn)題怎么解決

參數(shù)名參數(shù)作用
delayed_insert_timeout在獲取鏈接時(shí),等待握手的超時(shí)時(shí)間,只在登錄時(shí)有效,登錄成功這個(gè)參數(shù)就不管事了。主要是為了防止網(wǎng)絡(luò)不佳時(shí)應(yīng)用重連導(dǎo)致連接數(shù)漲太快,一般默認(rèn)即可
delayed_insert_timeout這是為myisam insert delay設(shè)計(jì)的超時(shí)參數(shù),在insert delay中止前等待insert語(yǔ)句的時(shí)間
innodb_lock_wait_timeout事務(wù)遇到鎖等待時(shí)的query超時(shí)時(shí)間。跟死鎖不一樣,innodb一旦檢測(cè)到死鎖立刻就會(huì)回滾代價(jià)小的那個(gè)事務(wù),鎖等待是沒(méi)有死鎖的情況下一個(gè)事務(wù)持有另一個(gè)事務(wù)需要的鎖資源,被回滾的肯定是請(qǐng)求鎖的那個(gè)query
innodb_rollback_on_timeout這個(gè)參數(shù)關(guān)閉或不存在的話遇到超時(shí)只回滾事務(wù)最后一個(gè)query,打開(kāi)的話事務(wù)遇到超時(shí)就回滾整個(gè)事務(wù)
interactive_timeout/wait_timeout一個(gè)持續(xù)sleep狀態(tài)的線程多久被關(guān)閉。線程每次被使用都會(huì)被喚醒為activity狀態(tài),執(zhí)行完query后成為interactive狀態(tài),重新開(kāi)始計(jì)時(shí)。wait_timeout不同在于只作用于tcp/ip和socket鏈接的線程,意義是一樣的
net_read_timeout / net_write_timeout這個(gè)參數(shù)只對(duì)tcp/ip鏈接有效,分別是數(shù)據(jù)庫(kù)等待接收客戶端發(fā)送網(wǎng)絡(luò)包和發(fā)送網(wǎng)絡(luò)包給客戶端的超時(shí)時(shí)間,這是在activity狀態(tài)下的線程才有效的參數(shù)
slave_net_timeout這是slave判斷主機(jī)是否掛掉的超時(shí)設(shè)置,在設(shè)定時(shí)間內(nèi)依然沒(méi)有獲取到master的回應(yīng)就人為master掛掉了

這里我們?cè)O(shè)置下sleep線程的時(shí)間,以免線程池被消耗太多

執(zhí)行修改腳本

set?global?interactive_timeout=100;
set?global?wait_timeout=30;

超出mysql最大連接數(shù)的問(wèn)題怎么解決

執(zhí)行完成后可以發(fā)現(xiàn)全局變量已修改

超出mysql最大連接數(shù)的問(wèn)題怎么解決

注意:在項(xiàng)目的連接字符中也需要確認(rèn)是否進(jìn)行了相關(guān)的配置,導(dǎo)致了mysql連接失敗問(wèn)題

以上設(shè)置會(huì)馬上生效,但是當(dāng)mysql重啟時(shí)這個(gè)設(shè)置會(huì)失效,更好的辦法是

找到mysqld塊,修改或者添加下面的設(shè)置:

max_connections=200
wait_timeout=30
interactive_timeout=100

這樣修改之后,即便重啟mysql也會(huì)默認(rèn)載入這個(gè)配置了

關(guān)于my.ini文件的路徑以及創(chuàng)建

關(guān)于 "超出mysql最大連接數(shù)的問(wèn)題如何解決" 就介紹到此。希望多多支持碩編程

下一節(jié):python?pymysql向sql語(yǔ)句中傳參的方法有哪些

mysql教程

相關(guān)文章
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频