超出MySQL最大连接数问题及解决

 更新时间:2023年05月15日 14:30:52   作者:来齐  
这篇文章主要介绍了超出MySQL最大连接数问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

超出MySQL最大连接数问题

如果遇到MySQ连接数超出最大限制了,不要慌,往下看:

通常,mysql的最大连接数默认是100, 最大可以达到16384。

查看最大连接数

show variables like '%max_connections%';

修改最大连接数

方法一:修改配置文件。推荐方法一

进入MySQL安装目录 打开MySQL配置文件 my.ini 或 my.cnf查找 max_connections=100 并将其修改为

max_connections=1000 然后再服务里重起MySQL服务即可.

方法二:命令行修改。不推荐方法二

命令行登录MySQL后。设置新的MySQL最大连接数为200:

MySQL> set global max_connections=200

如果已经连接不上了,先重启MySQL服务后再进行上述操作即可。

这种方式有个问题,就是设置的最大连接数只在mysql当前服务进程有效,一旦mysql重启,又会恢复到初始状态。因为mysql启动后的初始化工作是从其配置文件中读取数据的,而这种方式没有对其配置文件做更改。

MySQL最大连接数,TimeOut配置

MySQL连接数配置

1.MySQL的max_connections参数用来设置最大连接(用户)数。每个连接MySQL的用户均算作一个连接,max_connections的默认值为100左右

1.1查看数据库配置的最大连接数

show variables like "max_connections";

可以使用Navicat或者CMD进行命令查询

Navicat命令页面

CMD操作命令页面

1.2如果实际情况中的最大连接数超过,就会提示TimeOut超出最大请求数

这是我们需要进行配置项的修改

设置调整最大连接数

set global max_connections = 1000;

Mysql的连接线程池

1.查看Mysql数据库当前的所有连接线程

show full processlist;

图片中可以看到当前数据库的连接线程情况 。其中发现很多的线程都是Sleep状态,这个下面讲到的TimeOut配置会进行管理Sleep线程。

Mysql TimeOut配置

查看Mysql的TimeOut配置

show global variables like '%timeout%';

参数名参数作用
delayed_insert_timeout在获取链接时,等待握手的超时时间,只在登录时有效,登录成功这个参数就不管事了。主要是为了防止网络不佳时应用重连导致连接数涨太快,一般默认即可
delayed_insert_timeout这是为MyISAM INSERT DELAY设计的超时参数,在INSERT DELAY中止前等待INSERT语句的时间
innodb_lock_wait_timeout事务遇到锁等待时的Query超时时间。跟死锁不一样,InnoDB一旦检测到死锁立刻就会回滚代价小的那个事务,锁等待是没有死锁的情况下一个事务持有另一个事务需要的锁资源,被回滚的肯定是请求锁的那个Query
innodb_rollback_on_timeout这个参数关闭或不存在的话遇到超时只回滚事务最后一个Query,打开的话事务遇到超时就回滚整个事务
interactive_timeout/wait_timeout一个持续SLEEP状态的线程多久被关闭。线程每次被使用都会被唤醒为activity状态,执行完Query后成为interactive状态,重新开始计时。wait_timeout不同在于只作用于TCP/IP和Socket链接的线程,意义是一样的
net_read_timeout / net_write_timeout这个参数只对TCP/IP链接有效,分别是数据库等待接收客户端发送网络包和发送网络包给客户端的超时时间,这是在Activity状态下的线程才有效的参数
slave_net_timeout这是Slave判断主机是否挂掉的超时设置,在设定时间内依然没有获取到Master的回应就人为Master挂掉了

这里我们设置下Sleep线程的时间,以免线程池被消耗太多

执行修改脚本

set global interactive_timeout=100;
set global wait_timeout=30;

执行完成后可以发现全局变量已修改

注意:在项目的连接字符中也需要确认是否进行了相关的配置,导致了Mysql连接失败问题

以上设置会马上生效,但是当mysql重启时这个设置会失效,更好的办法是

找到mysqld块,修改或者添加下面的设置:

max_connections=200
wait_timeout=30
interactive_timeout=100

这样修改之后,即便重启mysql也会默认载入这个配置了

关于my.ini文件的路径以及创建

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL Group by的优化详解

    MySQL Group by的优化详解

    这篇文章主要介绍了MySQL Group by 优化的相关资料,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-03-03
  • Mysql复制表结构、表数据的方法

    Mysql复制表结构、表数据的方法

    这篇文章主要介绍了Mysql复制表结构、表数据的方法,需要的朋友可以参考下
    2015-10-10
  • Mysql5.5升级到5.6的真实操作步骤示例

    Mysql5.5升级到5.6的真实操作步骤示例

    MySQL5.5升级到5.6涉及下载升级包、数据权限备份、配置文件备份、解压安装、数据导入、重启服务、配置恢复等步骤
    2024-11-11
  • Windows10 mysql 8.0.12 非安装版配置启动方法

    Windows10 mysql 8.0.12 非安装版配置启动方法

    这篇文章主要为大家详细介绍了Windows10 mysql 8.0.12 非安装版配置启动,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • 详解MySQL的半同步

    详解MySQL的半同步

    这篇文章主要介绍了MySQL的半同步的相关资料,帮助大家更好的理解和学习使用MySQL数据库,感兴趣的朋友可以了解下
    2021-04-04
  • 深入了解mysql长事务

    深入了解mysql长事务

    这篇文章主要介绍了mysql长事务的相关资料,帮助大家更好的理解和学习mysql,感兴趣的朋友可以了解下
    2020-08-08
  • MySQL 数据库的临时文件究竟储存在哪里

    MySQL 数据库的临时文件究竟储存在哪里

    MySQL使用环境变量TMPDIR的值作为保存临时文件的目录的路径名。
    2009-02-02
  • mysql数据库备份命令分享(mysql压缩数据库备份)

    mysql数据库备份命令分享(mysql压缩数据库备份)

    这篇文章主要介绍了mysql数据库备份常用语句,包括数据库压缩备份、备份多个MySQL数据库、备份多个MySQL数据库、将数据库转移到新服务器等语句
    2014-01-01
  • SQL中limit函数语法与用法(MYSQL获取限制某行数据)

    SQL中limit函数语法与用法(MYSQL获取限制某行数据)

    limit是MySql的内置函数,一般用于查询表中记录的条数,作用是用于限制查询条数,下面这篇文章主要给大家介绍了关于SQL中limit函数语法与用法的相关资料,详细讲了MYSQL获取限制某行数据的方法,需要的朋友可以参考下
    2022-08-08
  • MySQL自增列解析(Auto_increment)

    MySQL自增列解析(Auto_increment)

    MySQL数据库为列提供了一种自增属性,本文主要介绍了MySQL自增列解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-09-09

最新评论