[Mysql] "Too many connections"

刚刚在项目中遇到mysql数据库连接不够的问题,查了一点资料,记录下。异常信息主要为:Data source rejected establishment of connection, message from server: "Too many connections"。可以明显的看到由于mysql的连接过多,导致数据拒绝新的请求连接。

查看mysql设置的连接数:show variables like 'max_connections';

查看历史最大连接数:show global status like 'Max_used_connections';

一般情况下将允许的连接数设置为1.2*Max_used_connections。

设置最大连接数:

  修改my.ini文件,在文件中添加内容,在[mysqld]下添加或者修改max_connections=xxx。

     直接执行命令(单次有效,重启后失效),执行命令set GLOBAL max_connections=xxx;

查看状态信息命令为: show global status like 'key' 或者 show status like 'key', 其中key的取值可以是下面这些:

Aborted_clients 由于客户没有正确关闭连接已经死掉,已经放弃的连接数量。 
Aborted_connects 尝试已经失败的MySQL服务器的连接的次数。 
Connections 试图连接MySQL服务器的次数。 
Created_tmp_tables 当执行语句时,已经被创造了的隐含临时表的数量。 
Delayed_insert_threads 正在使用的延迟插入处理器线程的数量。 
Delayed_writes 用INSERT DELAYED写入的行数。 
Delayed_errors 用INSERT DELAYED写入的发生某些错误(可能重复键值)的行数。 
Flush_commands 执行FLUSH命令的次数。 
Handler_delete 请求从一张表中删除行的次数。 
Handler_read_first 请求读入表中第一行的次数。 
Handler_read_key 请求数字基于键读行。 
Handler_read_next 请求读入基于一个键的一行的次数。 
Handler_read_rnd 请求读入基于一个固定位置的一行的次数。 
Handler_update 请求更新表中一行的次数。 
Handler_write 请求向表中插入一行的次数。 
Key_blocks_used 用于关键字缓存的块的数量。 
Key_read_requests 请求从缓存读入一个键值的次数。 
Key_reads 从磁盘物理读入一个键值的次数。 
Key_write_requests 请求将一个关键字块写入缓存次数。 
Key_writes 将一个键值块物理写入磁盘的次数。 
Max_used_connections 同时使用的连接的最大数目。 
Not_flushed_key_blocks 在键缓存中已经改变但是还没被清空到磁盘上的键块。 
Not_flushed_delayed_rows 在INSERT DELAY队列中等待写入的行的数量。 
Open_tables 打开表的数量。 
Open_files 打开文件的数量。 
Open_streams 打开流的数量(主要用于日志记载) 
Opened_tables 已经打开的表的数量。 
Questions 发往服务器的查询的数量。 
Slow_queries 要花超过long_query_time时间的查询数量。 
Threads_connected 当前打开的连接的数量。 
Threads_running 不在睡眠的线程数量。 
Uptime 服务器工作了多少秒。

 ===================================================

最好是通过修改文件的方式,mysql重启命令,使用root用户或者有权限的用户,使用service mysqld restart命令进行重启即可。

原文地址:https://www.cnblogs.com/liuming1992/p/4812419.html