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