报错信息
项目中有时候在启动springboot + mysql项目时会报错,报错信息:
MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"
根本原因:
出现这问题的根本原因:连接数超过了mysql的最大连接数max_connections,mysql默认max_connections=100;
解决办法
知道原因了就有了对应的方法,;
方法一:登录修改最大连接数(临时)
登录mysql修改最大连接max_connections
linux命令:
#mysql -u root -p
输入密码
-- 查看当前最大连接数
>show variables like 'max_connections';
>set global max_connections=1000;
这只能临时生效,设置的最大连接数只在mysql当前服务进程有效,一旦mysql重启,又会恢复到初始状态。因为mysql启动后的初始化工作是从其配置文件中读取数据的,而这种方式没有对其配置文件做更改。
方法二:修改配置文件
修改mysql配置文件my.ini 或 my.cnf 增加配置max_connections=1000,然后重启mysql;
查找my.ini/my.cnf
通常有两种可能,一个是在安装目录下,另一种是在数据文件的目录下;安装的时候如果没有人为改变目录的话,一般windows:c:/programdata/mysql往下的目录下,linux:/etc 目录下。
在[mysqld]下面添加
[mysqld]
max_connections = 1500
重启:
service mysqld restart
方法三:关闭闲置连接
show full processlist;
注意:
如果将用户连接线程杀死断掉,而会话没有杀掉的话,该用户会话又会重新开启一个用户连接线程。
show processlist
只能列出当前100条。如果想全部列出,可以使用SHOW FULL PROCESSLIST
命令kill <id>
补充:
mysql两外两个参数调整闲置连接关闭时间,减少闲置连接数:
1)interactive_timeout:
参数含义:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。
参数默认值:28800秒(8小时)
2)wait_timeout:
参数含义:服务器关闭非交互连接之前等待活动的秒数。
在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。
参数默认值:28800秒(8小时)
3)show processlist:
命令查看当前系统的连接状态;如果发现有大量的sleep状态的连接进程,则说明该参数设置的过大,可以进行适当的调整小些
4)查看用户连接数
select * from performance_schema.users;
最后:
服务器所支持的最大连接数是有上限的,因为每个连接的建立都会消耗内存,我们尽量设置合理的数值,并不是越大越好;