MySQL連接數(shù)管理
本文轉(zhuǎn)載自微信公眾號「MySQL技術(shù)」,作者MySQL技術(shù)。轉(zhuǎn)載本文請聯(lián)系MySQL技術(shù)公眾號。
前言:
MySQL 連接狀態(tài)是數(shù)據(jù)庫中比較重要的一個指標,比如說目前總共有多少個連接、各連接處于什么狀態(tài)等等,這些連接狀態(tài)也能從側(cè)面反映出數(shù)據(jù)庫當前運行狀況。本篇文章我們一起來學習下 MySQL 連接相關(guān)內(nèi)容。
1.connection相關(guān)參數(shù)
先來看下 connection 相關(guān)參數(shù),只有參數(shù)設置合理了,數(shù)據(jù)庫才能跑得更好。
- max_connections:最大連接數(shù),默認為 151 ,可動態(tài)修改。
- max_connect_errors:當同一個客戶端連接出錯的次數(shù)達到 max_connect_errors 時,服務器將阻止該主機進行再次連接。默認為 100 ,可動態(tài)修改。
- max_user_connections:對于單個數(shù)據(jù)庫用戶允許的最大同時連接數(shù)。默認為 0 ,即表示無限制,可動態(tài)修改。
- connect_timeout:等待一個連接響應的時間,默認為 10s ,在獲取連接階段起作用,可動態(tài)修改。
以 max_connections 參數(shù)為例,來看下具體參數(shù)如何查看及修改:
- # 查看相關(guān)參數(shù)
- mysql> show variables like 'max_connections';
- +-----------------+-------+
- | Variable_name | Value |
- +-----------------+-------+
- | max_connections | 151 |
- +-----------------+-------+
- # 修改參數(shù) (my.cnf配置文件中也要修改)
- mysql> set global max_connections = 500;
- Query OK, 0 rows affected (0.79 sec)
- mysql> show variables like 'max_connections';
- +-----------------+-------+
- | Variable_name | Value |
- +-----------------+-------+
- | max_connections | 500 |
- +-----------------+-------+
2.幾個常見連接錯誤
若 connection 相關(guān)參數(shù)設置不當,到達一定瓶頸時可能會出現(xiàn)連接錯誤的問題,下面列舉下幾種常見的連接錯誤及解決方法。
出現(xiàn)頻繁最高的可能就是 Too many connections 錯誤了,這個錯誤發(fā)生的原因是當前數(shù)據(jù)庫的總連接數(shù)已經(jīng)達到了 max_connections 數(shù)值,當再有客戶端嘗試連接時及會報此錯誤。MySQL 實際上允許 max_connections + 1 個客戶端連接,額外一個連接供具有 SUPER 特權(quán)的用戶使用。當發(fā)生 Too many connections 錯誤時,我看可以用 root 賬號登錄數(shù)據(jù)庫,然后增大 max_connections 參數(shù)即可。其實設置適當?shù)?max_connections 即可避免此類錯誤再次發(fā)生,默認的 151 顯然有點小,我們可以監(jiān)控下數(shù)據(jù)庫連接總數(shù),根據(jù)不同環(huán)境做出調(diào)整,比如設為 500 或 1000,當然也不能設置過大。
若出現(xiàn) Host is blocked because of many connection errors 錯誤時,那就是某臺主機連接錯誤達到 max_connect_errors 參數(shù)規(guī)定的上限了。解決這個錯誤有兩種方案,一個是進入 MySQL 命令行執(zhí)行 flush hosts 命令來刷新 host ,一個是增大 max_connect_errors 參數(shù)值。個人建議可以將 max_connect_errors 參數(shù)調(diào)大些,比如 1000 或 2000 。
對于 max_user_connections 參數(shù),一般采用默認 0 值即可,若想要限制單個用戶的最大連接數(shù),也可以設置下此參數(shù),比如 max_user_connections = 100 代表單個用戶最多同時發(fā)起 100 個連接。
如果客戶端經(jīng)常遇到 Lost connection to MySQL server at 'XXX' 錯誤,那就要考慮增大 connect_timeout 值了,默認值 10s 對于網(wǎng)絡良好的情況下是夠用的,如果客戶端和服務端網(wǎng)絡有延遲的情況,可以將 connect_timeout 參數(shù)調(diào)大來避免發(fā)生連接超時的錯誤。
總結(jié):
本篇文章介紹了 MySQL connection 相關(guān)內(nèi)容,要記住一個穩(wěn)定的數(shù)據(jù)庫,連接總數(shù)一般是相對穩(wěn)定的,若數(shù)據(jù)庫連接狀態(tài)波動很大,那要排查下是不是程序端或數(shù)據(jù)庫端有做過變更。