mysql實例的連接數max_user_connections 和max_connections 配置的那些事


        今天在查線上問題時,通過phpMyAdmin來進行DML操作,發現比平時慢多了,就各種進原因。

 項目的場景是一個mysql實例中創建了多個數據庫,猜想可能是相互影響所致。

         然后,查詢線上Mysql數據庫的連接數配置,發現明顯不太合理。

如下:

 

 大家知道 ,在服務器安裝完Mysql實例后,會在my.ini或my.cnf文件中配置一些關鍵參數,比如:

  | max_connections                               | 10000    -- 代表允許連接數據庫的所有用戶的連接數總和
  | max_user_connections                      | 3000      -- 代表允許單個用戶的連接數最大值,即並發值

關於max_connections:

# mysql服務器支持的最大並發連接數(用戶數)。但總會預留其中的一個連接給管理員使用超級權限登錄,即使連接數目達到最大限制。如果設置得過小而用戶比較多,會經常出現“Too many connections”錯誤。

關於max_user_connections:

#配置過低,會出現has already more than 'max_user_connections' active connections等錯誤

 

  另外,在mysql-5.7版本開始,創建用戶的時候,還可以在這里指定連接數,每小時的最大連接,及用戶並發連接【這時候指定的連接數,受限於my.ini中配置的連接數,因為my.ini配置的連接數是不區分用戶的】,如下:

  

 

最后,回到文章開始,由於max_user_connections設置過大,會出現一個客戶端占用大部分連接數的問題,致使另外的客戶端出現等待或連接超時的問題。

解決辦法:

1、針對全局配置,修改 MySQL 安裝目錄下 my.ini 或者 my.cnf 文件內的 max_user_connections 參數的數值,重啟 MySQL 服務器。

[mysqld]
datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql max_connections = 10000 max_user_connections=2000

2、通過其它方式處理一下,針對指定用戶設置的,比如:

方式1
GRANT USAGE ON *.* TO test_user@localhost MAX_USER_CONNECTIONS 2000;
方式2
UPDATE mysql.user SET max_user_connections = 2000 WHERE user='test_user' AND host='localhost'; FLUSH PRIVILEGES;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM