亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL too many connections錯誤的原因有哪些

發布時間:2021-03-30 14:09:52 來源:億速云 閱讀:265 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關MySQL too many connections錯誤的原因有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

   今天中午,開發測試環境的MySQL服務報了一個too many connections的錯誤,從問題上看,可能是連接池被打滿了,導致所有的連接都不可用了。

   在這種情況下,最為直接的辦法就是重新設置最大連接數,查看my.cnf文件,里面關于連接數的參數有兩個,分別是:

max_connections:最大連接數

max_user_connections:用戶最大連接數

其中,第一個參數確定的是該實例的最大連接數,第二個參數確定的是單個用戶的最大連接數。

   一般的線上環境,為了保險起見,一般這兩個參數不能設置為相等,可以將max_user_connections參數設置的稍微小一點,留有一定的余量,這樣可以防止單個用戶占用完所有的連接池。

    看到上面這個問題,我的第一反應是,登陸上去,kill掉一些連接,然而,當我想辦法登陸的時候,發現已經沒法登陸了,連DBA的管理賬號dba_admin都已經無法建立連接了。查看錯誤日志:

2019-08-12T06:02:42.928412Z 0 [Warning] Too many connections
2019-08-12T06:02:42.930181Z 0 [Warning] Too many connections
2019-08-12T06:02:44.595199Z 0 [Warning] Too many connections
2019-08-12T06:02:44.597160Z 0 [Warning] Too many connections
2019-08-12T06:02:44.782042Z 0 [Warning] Too many connections

   全部都是too many connections,幸虧是開發環境,這樣的話,我們可以使用停止數據庫服務的方法來進行重啟,然后重新增加最大連接數,當然,這個增加的量需要考量,一般情況下,需要跟wait_timeout的值結合起來設置,也就是等待超時時間,一般情況下,如果wait_timeout的值比較大,往往會造成連接數比較多的情況,而一個連接會消耗大約2M左右的內存,如果你設置的連接比較多,很可能出現內存耗盡的情況,而wait_timeout的值如果設置的比較小,連接會不停的創建和銷毀,這樣會浪費一定的IO資源。

  所以,如何得到一個平衡的值成為關鍵,在MySQL官方文檔中有如下解釋:

MySQL too many connections錯誤的原因有哪些

MySQL too many connections錯誤的原因有哪些

   從官方文檔的這個說明來看,幾個GB的內存完全可以支持你把連接數設置在500-1000之間,事實上,這個區間的值能夠滿足大部分的需求。

   除此之外,官方文檔上還說了一個特點,挺好的,就是

mysqld actually permits max_connections + 1 client connections. The extra connection is reserved for use by accounts that have the SUPER privilege. By granting the privilege to administrators and not to normal users (who should not need it), an administrator who also has the PROCESS privilege can connect to the server and use SHOW PROCESSLIST to diagnose problems even if the maximum number of unprivileged clients are connected. 

   翻譯過來就是事實上,允許的最大連接數是max_connections的值+1個連接,最后多的這個鏈接,是給super權限的用戶用的,這樣在連接被耗盡的時候,可以使用super權限登陸上去,進行show processlist的方法來查看連接,并kill掉一些不需要的連接,讓服務重新可用。

     然而,實際應用中,我們經常為了操作方便,而給一些不必要的賬號分配super權限,導致擁有super權限的普通用戶占用了多余的這一個連接,在今天這個問題中,這樣的設置卻無濟于事,還是無法登陸,因為,畢竟一個連接太少了,如果有其他的賬號已經占用了個這個super的連接,那么這個實例還是無法訪問。

   這樣的情況下,除了重啟mysql實例,修改my.cnf文件中的最大連接數,有沒有不停止服務而進行處理方法呢,答案是有的。但是有一個前提,你的服務要是Percona-server的,如果你使用的官方版本的MySQL,那這個辦法是行不通的,據說MariaDB也可以使用這個辦法,沒有測試過,不太懂,有興趣的可以測一測。

   從Percona Server 5.5.29開始,您可以簡單地添加extra_port到您的my.cnf,并且下次重新啟動時,端口將變為可用,并將偵聽與常規連接相同的bind_address。如果未設置extra_port變量,則默認情況下不會有其他端口可用。您還可以定義extra_max_connections此端口將處理的連接數。此默認值為1。

    以上所述,是Percona-Server官網上的描述,可以通過另外2個參數來實現連接池占用完之后的登陸問題:

mysql:(none) 22:12:51>>show variables like '%extra%';
+----------------------------------+-------+
| Variable_name                    | Value |
+----------------------------------+-------+
| extra_max_connections            | 10    || extra_port                       | 43130 |
+----------------------------------+-------+
2 rows in set (0.00 sec)

   就是這兩個參數,一個是extra_max_connections,另外一個是extra_port參數,這兩個參數使我們擁有額外的連接和額外的端口去連接服務器,從而使用show processlist觀察連接情況,殺掉一些不必要的連接,使得服務器重新可用。

 但是需要注意的是,在Percona Server 8.0.14及更新版本中已刪除extra_port,  因為MySQL社區已實現了admin_port,它復制了此功能。因此,請確保在升級到Percona Server 8.0.14時編輯my.cnf,如果已經在那里定義了extra_port,還請及時更新!

   最后我們看看連接的情況吧,在這個例子中,我們將extra_port設置成為了43130:

[root@ log]# /usr/local/mysql/bin/mysql -udba_admin -p -h227.0.0.1 -P4313
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 71920
Server version: 5.7.16-10-log Percona Server (GPL), Release 10, Revision a0c7d0d

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql--dba_admin@127.0.0.1:(none) 22:40:59>>exit
Bye

---------------------------------------------------------------------------

[root@ log]# /usr/local/mysql/bin/mysql -udba_admin -p -h227.0.0.1 -P43130
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 71941
Server version: 5.7.16-10-log Percona Server (GPL), Release 10, Revision a0c7d0d

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql--dba_admin@127.0.0.1:(none) 22:41:05>>

簡單總結一下

  • 如果使用MySQL官方版本:

   發生連接數超過最大值的情況的時候,首先使用super全新的賬戶進行登陸,查看是否可以直接登陸,如果不行的話,那就只能停服務,然后重新設置連接數,在重啟服務。

  • 如果使用Percona-Server或者MariaDB:

   可以嘗試提前配置extra_port來防止出現連接數被占滿的情況。如果一旦發生了這種情況而沒有提前進行配置,那么在停止服務之后最好進行補充,以防止此類情況再次發生。

關于“MySQL too many connections錯誤的原因有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阆中市| 天门市| 吴桥县| 元朗区| 贵定县| 霍州市| 曲松县| 东海县| 长顺县| 曲麻莱县| 光泽县| 白水县| 嘉定区| 德保县| 阜平县| 云和县| 姚安县| 东光县| 包头市| 娄烦县| 镇江市| 桐乡市| 阿拉善右旗| 龙泉市| 宜兰市| 兴仁县| 将乐县| 巩留县| 甘洛县| 平舆县| 辽阳市| 化州市| 无为县| 勐海县| 太和县| 金阳县| 济宁市| 康保县| 泉州市| 闻喜县| 民县|