天天看點

MySQL 連接配接數過多的處理方法合集 - Too many connections - 卡拉雲

MySQL 連接配接數過多的處理方法合集 - Too many connections - 卡拉雲

本文首發:

MySQL 連接配接數過多的處理方法合集 - Too many connections - 卡拉雲

碰到

Can not connect to MySQL server. Too many connections”-mysql

錯誤着實令人抓狂。這基本等于失去了對 MySQL 的控制權。本教程将詳細講解多種處理此錯誤的方法。

sudo mysql -uroot -p
ERROR 1040 (00000): Too many connections           

本教程将分這幾個來講解此類錯誤的原因。

  • 如何檢視 MySQL 連接配接狀态?
  • 如何檢視目前 MySQL 連接配接池是否已滿?
  • 限制逾時時間的方法,縮短 sleep 時間,使系統更快回收連接配接。
  • 修改配置檔案中最大連接配接數的方法,保證連接配接暢通。
  • 火線救援法,不用重新開機,不用登入 MySQL,即可修改最大連接配接數。
  • 提前布局,給 root 預留好連接配接通道。

一. 錯誤原因

出現 MySQL 連接配接數過多有多種情況,多數是因為

mysql_connect

 ,沒有 

mysql_close

; 當

sleep

連接配接占滿最大連接配接數

max_connections

時,會導緻 

Too many connections

 錯誤。

MySQL 預設最大連接配接數

max_connections

為 151,其實 MySQL 還給 root 留了多一個通道,真正的最大連接配接數為

max_connections + 1

 。但實際工作中因為各種原因,這個 1 也有可能被占用。這時,我們無法通過登入 MySQL 調整參數的方法來處理這個錯誤。

二. 檢視目前 MySQL 連接配接情況

我們可以使用 

SHOW PROCESSLIST;

 檢視前 100 條連接配接。

SHOW PROCESSLIST;           

也可以使用 

SHOW full PROCESSLIST;

 檢視所有連接配接。

SHOW full PROCESSLIST;           
MySQL 連接配接數過多的處理方法合集 - Too many connections - 卡拉雲

上圖中 ID 15 的連接配接 我們可以看到它已經 11388s

擴充閱讀:《

如何使用 MySQL 慢查詢日志進行性能優化

三. 如何檢視目前 MySQL 連接配接池是否已滿?

使用 

mysqladmin -u kalacloud -p status

 檢視目前連接配接數情況

MySQL 連接配接數過多的處理方法合集 - Too many connections - 卡拉雲

将 

kalacloud

 替換為你的 MySQL 賬号名稱,在傳回的結果中,

Threads

 的值為目前連接配接數,如果目前連接配接數接近或等于最大連接配接數,那麼就說明 MySQL 連接配接數已經滿了或接近滿了。

MySQL 觸發器的建立、使用、檢視、删除教程及應用場景實戰案例

四. 合理設定逾時時間

之是以會出現大量 

sleep

 占滿連接配接,除了業務量的原因外,也有可以從逾時時間着手調整,可根據實際情況适當縮短逾時時間,讓 MySQL 可在短時間自動清理逾時連接配接,以達到保證連接配接通常的目的。

mysqld

 連接配接逾時參數有以下兩個:

預設情況下,兩者都是 28800 秒(8 小時),我們可以在 MySQL 配置檔案中修改這兩個參數。

如果你使用的是

mysql_pconnect

 這種持久連接配接的話,可以将逾時時間降到更合适的值,比如 600 (10 分鐘)甚至 60(1 分鐘)。這個逾時時間并沒有一個明确的時間,主要還是要看你的應用場景中的實際需求。

1.在配置檔案中修改逾時時間(需重新開機 MySQL 生效):

首先打開 

mysqld.cnf

 配置檔案。

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf           

然後在配置檔案中找到這兩行,并修改對應的參數:

[mysqld]
interactive_timeout=60
wait_timeout=60           
MySQL 配置檔案詳解

2.臨時變更連接配接逾時時間(無需重新開機):

SET GLOBAL interactive_timeout = 60;
SET GLOBAL wait_timeout = 60;           

注意:

  • 這是臨時變更配置的方法,在重新開機 MySQL 後會恢複配置檔案中的設定值。
  • 對于已經打開的連接配接,是不會被關閉的。隻有建立立的連接配接才會在 60 秒後關閉。
如何遠端連接配接 MySQL 資料庫,阿裡雲騰訊雲允許遠端連接配接教程

五. 檢視及修改最大連接配接數

在 MySQL 中,預設連接配接數為 151,我們可以通過修改 MySQL 配置檔案永久調整連接配接數參數,也可以通過 SQL 指令臨時調整。

1.檢視目前 MySQL 連接配接數

mysql> show variables like '%max_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.01 sec)

mysql>           

2.臨時調整目前 MySQL 連接配接數

set GLOBAL max_connections = 300;           
MySQL 連接配接數過多的處理方法合集 - Too many connections - 卡拉雲

3.通過修改 MySQL 配置檔案調整最大連接配接數

首先打開 MySQL 配置檔案:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf           

在 [mysqld] 下面找到 

max_connections

 ,如果沒有可直接添加。

[mysqld]
...

max_connections = 300

...           

修改後重新開機 MySQL,使配置檔案生效:

sudo systemctl restart mysql           

重新開機後,進入 MySQL ,我們可以看到最大連接配接數配置已經生效。

mysql> show variables like '%max_connections%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| max_connections        | 300   |
| mysqlx_max_connections | 100   |
+------------------------+-------+
2 rows in set (0.02 sec)

mysql>           
MySQL 配置檔案 my.cnf / my.ini 逐行詳解

六. 無法登入 MySQL 時,如何修改最大連接配接數

在無法登入又無法重新開機 MySQL 時,我們可以使用以下方法進行操作,以增大連接配接數。

1.修改 pid 增大連接配接數

我們可以使用 gdb 工具,在不進入資料庫的情況下,修改最大連接配接數。

gdb -p $(cat data/kalacloud.pid)
-ex "set max_connections=5000" -batch           
  • data/kalacloud.pid

    :将這裡修改為你伺服器中 

    pid

     的檔案路徑及檔案名。

此方法僅适用于特殊、緊急情況,在生産環境使用,有一定風險,慎用。

七. 提前布局,防患于未然

在 MySQL 配置檔案中,有兩個有關連接配接數的參數

  • max_connections

    :控制最大連接配接數。
  • max_user_connections

    :控制單個使用者的最大連接配接數。當此參數為 100 時,那麼任意使用者(含 root 使用者)最多可建立 100 個連接配接。

制定連接配接政策:

max_connections = 2000
max_user_connections= 300           

當 MySQL 有 6 個使用者時(不含 root ),單個使用者最大連接配接數為 300,那麼 6 個使用者最多有 1800 連接配接。那麼系統總會剩下 200 個連接配接留給 root 使用。

六. 總結

有關 MySQL 連接配接數過多的錯誤,我們要在平時的工作中多實踐,這裡的很多關鍵參數都需要我們對手中的工作有更宏觀的認識,才能更好的設定這些參數。

MySQL 連接配接數過多的處理方法合集 - Too many connections - 卡拉雲

最後推薦以下卡拉雲,卡拉雲是一套低代碼開發工具,可一鍵接入包括 MySQL 在内的常見資料庫及 API,無需懂任何前端,隻需要簡單拖拽,即可快速搭建企業内部工具。數月的開發工作量,使用卡拉雲後可縮減至數天,免費試用

卡拉雲

MySQL 連接配接數過多的處理方法合集 - Too many connections - 卡拉雲

卡拉雲可一鍵接入市面上常見的資料庫及 API

有關 MySQL 教程,可繼續拓展學習:

上一篇: 窗體類JFrame
下一篇: ass3實驗