如题,本章主要讲下当服务器出现 ERROR 1040: Too many connections错误时的一些处理心得。

max_connections查看

  1. ## 查看最大连接数
  2. SHOW VARIABLES LIKE "max_connections";
  3. +-----------------+-------+
  4. | Variable_name | Value |
  5. +-----------------+-------+
  6. | max_connections | 512 |
  7. +-----------------+-------+
  8.  
  9. ## 查看已使用最大连接数
  10. SHOW VARIABLES LIKE 'Max_used_connections';
  11. +----------------------+-------+
  12. | Variable_name | Value |
  13. +----------------------+-------+
  14. | Max_used_connections | 499 |
  15. +----------------------+-------+

  

处理方案

这个问题一般有两种处理方案,解决方案非常容易,我们只需要增加max_connections连接数即可。

增加当前会话的mysql最大连接数

  1. SET GLOBAL max_connections = 1000;

上面mysql连接值临时增加到1000,但仅适用于当前会话。一旦我们重新启动mysql服务或重新启动系统,该值将重置为默认值。

永久增加mysql最大连接数

为了永久增加mysql连接数,我们需要编辑mysql配置文件,即/etc/my.cnf

sudo vim /etc/my.cnf

  1. ## 修改
  2. max_connections = 1000

保存文件重启MySQL即可生效。

扩多少合适?

Max_connextions并不是越大越好的,那么如何配置?

方式一

对于提高MySQL的并发,很大程度取决于内存,官方提供了一个关于innodb的内存计算方式

  1. innodb_buffer_pool_size
  2. + key_buffer_size
  3. + max_connections * (sort_buffer_size + read_buffer_size + binlog_cache_size)
  4. + max_connections * 2MB

方式二

安装比例扩容:

  1. max_used_connections / max_connections * 100% = [85, 90]%

最大使用连接数/最大连接数达到了80%~90%区间,就建议进行优化或者扩容了。

扩展

以下也涉及几种常见的影响MySQL性能的情况:

线程

  1. SHOW STATUS LIKE 'Threads%';
  2. +-------------------+--------+
  3. | Variable_name | Value |
  4. +-------------------+--------+
  5. | Threads_cached | 1 |
  6. | Threads_connected | 217 |
  7. | Threads_created | 29 |
  8. | Threads_running | 88 |
  9. +-------------------+--------+
  10.  
  11. SHOW VARIABLES LIKE 'thread_cache_size';
  12. +-------------------+-------+
  13. | Variable_name | Value |
  14. +-------------------+-------+
  15. | thread_cache_size | 10 |
  16. +-------------------+-------+
  • Threads_cached 线程在缓存中的数量
  • Threads_connected 当前打开的连接数
  • Threads_created 创建用于处理连接的线程数。
  • Threads_running 未休眠的线程数

如果Threads_created大,则可能要增加thread_cache_size值。缓存未命中率可以计算为Threads_created / Connections

查看表锁情况

  1. SHOW GLOBAL STATUS LIKE 'table_locks%';
  2. +-----------------------+-------+
  3. | Variable_name | Value |
  4. +-----------------------+-------+
  5. | Table_locks_immediate | 90 |
  6. | Table_locks_waited | 0 |
  7. +-----------------------+-------+
  • Table_locks_immediate 立即获得表锁请求的次数
  • Table_locks_waited 无法立即获得对表锁的请求的次数,需要等待。这个值过高说明性能可能出现了问题,并影响连接的释放

慢查询

  1. show variables like '%slow%';
  2.  
  3. +---------------------------+----------------------------------------------+
  4. | Variable_name | Value |
  5. +---------------------------+----------------------------------------------+
  6. | slow_launch_time | 2 |
  7. | slow_query_log | On |
  8. +---------------------------+----------------------------------------------+

线程详情

  1. ## 查看每个线程的详细信息
  2. SHOW PROCESSLIST;
  3. +--------+----------+------------------+--------------+---------+-------+-------------+------------------+
  4. | Id | User | Host | db | Command | Time | State | Info |
  5. +--------+----------+------------------+--------------+---------+-------+-------------+------------------+
  6. | 3 | xxxadmin | localhost | NULL | Sleep | 1 | cleaning up | NULL |
  7. | 4 | xxxadmin | localhost | NULL | Sleep | 0 | cleaning up | NULL |
  8. | 5 | xxxadmin | localhost | NULL | Sleep | 6 | cleaning up | NULL |
  9. +--------+----------+------------------+--------------+---------+-------+-------------+------------------+

总结

当然,以上只是一个大概的解决思路,无论使用哪一种方式,都需要结合实际业务场景去扩容。

另外,对于生产环境,设置恰当的告警阈值,也是很有必要的。

最后,在编程时,由于用MySQL语句调用数据库执行SQL,会分配一个线程操作MySQL,所以在结束调用后,需要回收连接,避免泄漏。

参考文章

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_max_connections

https://dev.mysql.com/doc/refman/5.7/en/server-status-variables.html

https://dev.mysql.com/doc/refman/8.0/en/memory-use.html

MySQL Calculator

MySQL ERROR 1040: Too many connections的更多相关文章

  1. Go连接MySql数据库Error 1040: Too many connections错误解决

    原文:https://my.oschina.net/waknow/blog/205654 摘要: 使用Go链接数据库时,由于连接释放不当会在一段时间以后产生too many connections的错 ...

  2. mysql 1040 连接数太多 mysql Error 1040 too many connection解决办法

    近在用SpringMVC开发的时候,突然出现1040 too many connection的错误,看错误的意思是连接的人数太多了.百度经验:jingyan.baidu.com 方法/步骤   1 当 ...

  3. max_connections 与 max_used_connections --ERROR 1040: Too many connections

    mysql> show variables like 'max_connections'; +-----------------+-------+ | Variable_name | Value ...

  4. Mysql连接数太多ERROR 1040 (HY000): Too many connections

    数据库连接报错:ERROR 1040 (HY000): Too many connections   1.查看连接数 /usr/local/mysql/bin/mysqladmin -h host - ...

  5. 【已解决】mysql连接出错:ERROR 1040 (HY000): Too many connections

    连接mysql,结果出错: ? 1 ERROR 1040 (HY000): Too many connections 去修改mysql的配置文件,然后添加: ? 1 2 3 4 5 6 7 8 9 1 ...

  6. mysql 链接数满了的错误 ERROR 1040 (HY000): Too many connections

    mysql 链接数满了的错误 ERROR 1040 (HY000): Too many connections 第一种处理方式: ./mysql -u root -p 登录成功后执行以下语句查询当前的 ...

  7. ERROR 1040 (08004): Too many connections

    ERROR 1040 (08004): Too many connections 长期一来,mysql低版本中,当面对连接数陡增而出现too many connections时,往往比较棘手.今天特意 ...

  8. ERROR 1040 (HY000) Too many connections

    C:\Users\Jilil>mysql -u root -pEnter password: *************ERROR 1040 (HY000): Too many connecti ...

  9. [翻译]:MySQL Error: Too many connections

    翻译:MySQL Error: Too many connections   前言: 本文是对Muhammad Irfan的这篇博客MySQL Error: Too many connections的 ...

随机推荐

  1. EntityFramework Core上下文实例池原理分析

    前言 无论是在我个人博客还是著作中,对于上下文实例池都只是通过大量文字描述来讲解其基本原理,而且也是浅尝辄止,导致我们对其认识仍是一知半解,本文我们摆源码,从源头开始分析.希望通过本文从源码的分析,我 ...

  2. SpringBoot入门最简单的一个项目示例

    使用IDEA创建一个SpringBoot项目 1.1 打开IDEA,文件-New-Project 1.2下一步,选择版本8(根据自己安装的JDK版本来选择) 1.3 下一步后点击Web,勾选Sprin ...

  3. 云计算之路-出海记:命令行下的 AWS

    俗话说"三百六十行,行行出状元",自从有了电脑之后,三百六十行又多了一行 -- 命令行.GUI 的诞生开创了繁荣的 PC "窗口"(windows)时代,互联网 ...

  4. JavaScript ES 模块:现代化前端编程必备技能

    自从 ES 模块被添加到规范中后,JavaScript 中的模块就更加简单了.模块按文件分开,异步加载.导出是用 export 关键字定义的:值可以用 import 关键字导入. 虽然导入和导出单个值 ...

  5. lambda表达式的distinct去重

    天真的我最开始以为可以写成list.distinct(x=>x.name);以为这样就可以按照name去重了,结果是不行的.这里记录下正确的用法. 1.这里是针对int集合  可以满足 #reg ...

  6. javascript播放带透明通道的mp4动画

    随着互联网的发展,动画效果也在一直更新,从刚开始的flsh动画,cocos骨骼动画,到YY开源的svga动画.最近1年来,带有透明通道的mp4动画被使用的极为广泛,对于app端.github上有开源的 ...

  7. Docker - 解决 gitlab 容器上的项目进行 clone 时,IP 地址显示一串数字而不是正常 IP 地址的问题

    问题背景 通过 gitlab 容器创建了一个项目,想 clone 到本地,结果发现项目的 IP 地址是一串数字 问题排查 明明创建项目的时候,IP 地址还是正常的鸭! 再看看项目的 settings ...

  8. http 请求体数据处理2--ngx

    HTTP 处理数据包, 有的业务不需要,此时只需要将数据包文读取后丢弃, 但是ngx 为什么还要提供一个丢弃接口呢???解决了什么问题?? ------对于HTTP模块而言,放弃接收包体就是简单地不处 ...

  9. nginx&http 第三章 惊群

    惊群:概念就不解释了. 直接说正题:惊群问题一般出现在那些web服务器上,Linux系统有个经典的accept惊群问题,这个问题现在已经在内核曾经得以解决,具体来讲就是当有新的连接进入到accept队 ...

  10. jm8.6编解码器概述

    自己在学习h264的路上,欢迎讨论交流. 前段时间研究JM出品的h264编码器,代码实在看不下去,因此换了个角度来研究诸多算法--逆向方式(解码),本系列文章记录一些遇到的东西和思考. 1. JM介绍 ...