show variables like '%max_connections%'; -- 查询数据库当前设置的最大连接数
set global max_connections=1000; -- 设置最大连接数,服务器重启后失效,可以写到my.ini配置文件中
show global status like 'Max_used_connections'; -- 服务器历史响应的最大连接数
MariaDB [(none)]> show status like 'Threads%'; -- 当前实时连接
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| Threads_cached | 0 |
| Threads_connected | 3 | -- 打开的连接数
| Threads_created | 4613 | -- 表示创建过的线程数,如果值过大,表明服务器一直在创建线程,可以适当增加配置文件中thread_cache_size值
| Threads_running | 1 | -- 激活的连接数,当前并发数
+-------------------+-------+
4 rows in set (0.00 sec)
show variables like 'thread_cache_size';
set global thread_cache_size=60;
MySQL服务器的连接数并不是要达到最大的100%为好,还是要具体问题具体分析,如果遇见“MySQL: ERROR 1040: Too many connections”的情况:
(1)可能访问量确实很高,MySQL服务器抗不住,这个时候就要考虑增加从服务器分散读压力,
(2)另外一种情况是MySQL配置文件中max_connections值过小
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 256 |
+-----------------+-------+
这台MySQL服务器最大连接数是256,然后查询一下服务器响应的最大连接数:
MariaDB [(none)]> show global status like '%max_used_connections%';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Max_used_connections | 255 |
+----------------------+-------+
MySQL服务器过去的最大连接数是255,没有达到服务器连接数上限256,应该没有出现1040错误,比较理想的设置是: Max_used_connections / max_connections * 100% ≈ 85%
最大连接数占上限连接数的85%左右,如果发现比例在10%以下,MySQL服务器连接上线就设置得过高了。