【MySQL】mysql too many connections 问题检查

数据库链接出现 too many connections 经各方查阅谈几点看法,各方资料出现这个原因是MySQL设置的连接数超了。导致新的链接无法连接。MySQL 默认 100个连接数,程序连接池初始化数是10个。后端程序启动多了会有这个问题。

极速解决办法,立刻重启数据库,释放掉部分链接。

  • 修改MySQL数据库连接数,查看当前大小使用show variables like "max_connections";
// 当前生效
set GLOBAL max_connections=1000; 

或者 修改MySQL配置文件/etc/my.ini增加配置,重启服务。

max_connections=1000; 
  • 分析MySQL当前链接进程,show processlist;
    【MySQL】mysql too many connections 问题检查_第1张图片
    image.png

    大部分链接处于sleep状态,继续查阅会找到与Mysql两个属性wait_timeoutinteractive_timeout有关,网上建议修改这两个参数,这两个参数默认值都是8小时,这两个属性官方释义为:
    • 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小时)

个人看法:

后台程序连接池初始化10个,程序启动后会与MySQL服务建立TCP链接,TCP链接特点是一对一双方共同建立的联系。MySQL对于连接池中10个链接默认保持8小时,如果Java端不中断链接8小时内是有效的。如果超过8小时有效时间,Mysql 服务也就强制端口链接,此时链接无效。但仍存在于Java段连接池中,此时后端程序仍使用此链接时,不进行连接的有效检查,此链接是null就会产生异常。所以不建议将修改MySQLwait_timeout改小。

你可能感兴趣的:(【MySQL】mysql too many connections 问题检查)