超出mysql最大連接數的問題怎么解決
本文講解"超出mysql最大連接數的問題如何解決",希望能夠解決相關問題。
超出mysql最大連接數問題
如果遇到mysq連接數超出最大限制了,不要慌,往下看:
通常,mysql的最大連接數默認是100, 最大可以達到16384。
查看最大連接數
show?variables?like?'%max_connections%';
修改最大連接數
方法一:修改配置文件。推薦方法一
進入mysql安裝目錄 打開mysql配置文件 my.ini 或 my.cnf查找 max_connections=100 并將其修改為
max_connections=1000 然后再服務里重起mysql服務即可.
方法二:命令行修改。不推薦方法二
命令行登錄mysql后。設置新的mysql最大連接數為200:
mysql>?set?global?max_connections=200
如果已經連接不上了,先重啟mysql服務后再進行上述操作即可。
這種方式有個問題,就是設置的最大連接數只在mysql當前服務進程有效,一旦mysql重啟,又會恢復到初始狀態。因為mysql啟動后的初始化工作是從其配置文件中讀取數據的,而這種方式沒有對其配置文件做更改。
mysql最大連接數,timeout配置
mysql連接數配置
1.mysql的max_connections參數用來設置最大連接(用戶)數。每個連接mysql的用戶均算作一個連接,max_connections的默認值為100左右
1.1查看數據庫配置的最大連接數
show?variables?like?"max_connections";
可以使用navicat或者cmd進行命令查詢
1.2如果實際情況中的最大連接數超過,就會提示timeout超出最大請求數
這是我們需要進行配置項的修改
設置調整最大連接數
set?global?max_connections?=?1000;
mysql的連接線程池
1.查看mysql數據庫當前的所有連接線程
show?full?processlist;
圖片中可以看到當前數據庫的連接線程情況 。其中發現很多的線程都是sleep狀態,這個下面講到的timeout配置會進行管理sleep線程。
mysql timeout配置
查看mysql的timeout配置
show?global?variables?like?'%timeout%';
參數名 | 參數作用 |
---|---|
delayed_insert_timeout | 在獲取鏈接時,等待握手的超時時間,只在登錄時有效,登錄成功這個參數就不管事了。主要是為了防止網絡不佳時應用重連導致連接數漲太快,一般默認即可 |
delayed_insert_timeout | 這是為myisam insert delay設計的超時參數,在insert delay中止前等待insert語句的時間 |
innodb_lock_wait_timeout | 事務遇到鎖等待時的query超時時間。跟死鎖不一樣,innodb一旦檢測到死鎖立刻就會回滾代價小的那個事務,鎖等待是沒有死鎖的情況下一個事務持有另一個事務需要的鎖資源,被回滾的肯定是請求鎖的那個query |
innodb_rollback_on_timeout | 這個參數關閉或不存在的話遇到超時只回滾事務最后一個query,打開的話事務遇到超時就回滾整個事務 |
interactive_timeout/wait_timeout | 一個持續sleep狀態的線程多久被關閉。線程每次被使用都會被喚醒為activity狀態,執行完query后成為interactive狀態,重新開始計時。wait_timeout不同在于只作用于tcp/ip和socket鏈接的線程,意義是一樣的 |
net_read_timeout / net_write_timeout | 這個參數只對tcp/ip鏈接有效,分別是數據庫等待接收客戶端發送網絡包和發送網絡包給客戶端的超時時間,這是在activity狀態下的線程才有效的參數 |
slave_net_timeout | 這是slave判斷主機是否掛掉的超時設置,在設定時間內依然沒有獲取到master的回應就人為master掛掉了 |
這里我們設置下sleep線程的時間,以免線程池被消耗太多
執行修改腳本
set?global?interactive_timeout=100; set?global?wait_timeout=30;
執行完成后可以發現全局變量已修改
注意:在項目的連接字符中也需要確認是否進行了相關的配置,導致了mysql連接失敗問題
以上設置會馬上生效,但是當mysql重啟時這個設置會失效,更好的辦法是
找到mysqld塊,修改或者添加下面的設置:
max_connections=200 wait_timeout=30 interactive_timeout=100
這樣修改之后,即便重啟mysql也會默認載入這個配置了
關于my.ini文件的路徑以及創建
關于 "超出mysql最大連接數的問題如何解決" 就介紹到此。希望多多支持碩編程。