今天在查線上問題時,通過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、通過其它方式處理一下,針對指定用戶設置的,比如:
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;