文章目录

  • 1. 复现错误
  • 2. 分析错误
  • 3. 解决问题
  • 4. 补充说明

1. 复现错误

今天前端在调试接口时,报出Too many connections的错误。

于是,打开出MySQL数据库,报出的错误如下图所示:

Error connecting to MySQL: Too many connections(code 1040)

2. 分析错误

正赶上最近ChatGPT比较火,借助他来解决我的错误:

ChatGPT建议我增加MySQL的连接数,但首先通过如下命令查看连接数:

mysql> show global status like 'Thread%';
+-------------------+-----------+
| Variable_name     | Value     |
+-------------------+-----------+
| Threads_cached    | 4         |
| Threads_connected | 1         |
| Threads_created   | 5         |
| Threads_running   | 160       |
+-------------------+-----------+
4 rows in set (0.01 sec)
  1. Threads_cachedMySQL管理的线程池中还有多少可以被复用的资源。

  2. Threads_connected:这个数值指的是打开的连接数。

  3. Threads_created:表示创建过的线程数。

如果发现Threads_created值过大的话,表明MySQL服务器一直在创建线程,这也是比较耗资源。可以适当增加配置文件中的thread_cache_size值,如下代码所示:

mysql> set global thread_cache_size=60;
Query OK, 0 rows affected (0.00 sec)
  1. Threads_running:这个数值指的是激活的连接数,这个数值一般远低于connected数值。

Threads_connectedshow processlist结果相同,表示当前连接数。

如下show processlist;,执行的结果如下图:

mysql> show processlist;
+----+------+-----------------+------+---------+------+----------+------------------+
| Id | User | Host            | db   | Command | Time | State    | Info             |
+----+------+-----------------+------+---------+------+----------+------------------+
| 62 | root | localhost:56520 | NULL | Query   |    0 | starting | show processlist |
+----+------+-----------------+------+---------+------+----------+------------------+
1 row in set (0.00 sec)

Threads_connected的值为1,而show processlist查出1条数据。

因而,Threads_connectedshow processlist结果相同。

准确的来说,Threads_running是代表当前并发数,由上可以看出并发数是160

于是,查询数据库设置的最大连接数,如下代码所示:

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set, 1 warning (0.04 sec)

数据库的并发数是160,而最大连接数是151

由此可见,数据库的并发数超过了最大的连接数。因而,我们需要修改最大连接数。

除了最大连接数,还要查看连接时长,如下代码所示:

mysql> show global variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 28800 |
+---------------+-------+
1 row in set, 1 warning (0.00 sec)

连接时长是28800,也就是默认是8小时。

3. 解决问题

我们在修改最大连接数时,同时也要修改连接时长。

  1. 修改最大连接数

因为,数据库的并发数超过了最大的连接数,我们可按如下命令修改最大连接数:

mysql> set GLOBAL max_connections=1000;
Query OK, 0 rows affected (0.04 sec)

重新查询最大连接数,来校验是否设置成功:

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 1000  |
+-----------------+-------+
1 row in set, 1 warning (0.01 sec)

此时,便可以Too many connections的问题。

我们除了设置最大连接数(max_connections),同时,也要修改mysql的连接数的时长。

  1. 修改连接时长

我们可以使用如下命令,修改连接时长,自动杀死线程。

mysql> set global wait_timeout=300;
Query OK, 0 rows affected (0.00 sec)

使用如下命令,查看是否修改成功:

mysql> show global variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout  | 300   |
+---------------+-------+
1 row in set, 1 warning (0.00 sec)

这种方式只是临时修改,重启mysql会失效。

因而,修改mysql的配置/etc/my.cnf

修改完毕后,重启mysql5.7即可:

4. 补充说明

关于show variables like 'xxx'的更多知识,可以参考这篇博文:全网详细介绍MySQL中的show variables like ‘%xxx%’

Error connecting to MySQL: Too many connections(code 1040)的错误解决方法相关推荐

  1. Linux下MySql出现#1036 – Table ‘ ‘ is read only 错误解决方法

    Linux下MySql出现#1036 – Table ' ' is read only 错误解决方法 参考文章: (1)Linux下MySql出现#1036 – Table ' ' is read o ...

  2. windows 安装RabbitMQ 遇到 epmd error for host xxx: address (cannot connect to host/port)错误解决方法

    我在windows上安装RabbitMQ后在运行rabbitmq-server之后报错: "WARNING: Using RABBITMQ_ADVANCED_CONFIG_FILE: C:\ ...

  3. 连接mysql报2059错_MySQL连接2059错误解决方法

    开始学MySQL,结果安装完SQLyog后连接不了,总是弹出提示2059错误.在网上查找了一下才发现原因,MySQL8.0.11版本启用了新特性,用户登录加密规则改为了caching_sha2_pas ...

  4. mysql err 1349_MySQL 视图 第1349号错误解决方法

    代码如下: CREATE OR REPLACE VIEW BLOG_V_ADMIN (ID,NICKNAME,SEX,EMAIL,PHONE,QQ,MSN,HTTP,REGISTER_TIME, IP ...

  5. mysql Access denied for user root@localhost错误解决方法总结

     代码如下 复制代码 # /etc/init.d/mysql stop # mysqld_safe --user=mysql --skip-grant-tables --skip-networking ...

  6. Linux环境下MySQL报Table ‘xxx‘doesn‘t exist错误解决方法

    问题:程序报Table 'xxx' doesn't exist 的错误,但是查看数据库发现该表已经存在且字母也没有拼错.原因:Linux 上的mysql默认是区分大小写导致的. 解决:改动mysql的 ...

  7. Linux环境下MySQL报Table 'xxx' doesn't exist错误解决方法

    问题:程序报Table 'xxx' doesn't exist 的错误,但是查看数据库发现该表已经存在且字母也没有拼错. 原因:Linux 上的mysql 默认是区分大小写导致的. 解决:改动mysq ...

  8. Linux下MySQL报Table 'xxx' doesn't exist错误解决方法

    今天将项目用docker打包放在centos环境中出现了一个奇葩的问题: 控制台总是报错,说我的表不存在,可是我通过select查询之后发现表存在啊. 经过一番查询才发现原因是: linux下mysq ...

  9. hive3.1.2在进行初始化的时候出现Error: Table ‘CTLGS‘ already exists (state=42S01,code=1050)的错误提示。

    项目场景: hive3.1.2在进行初始化的时候出现Error: Table 'CTLGS' already exists (state=42S01,code=1050)的错误提2示. 问题描述 在h ...

最新文章

  1. Codeforces 1106F Lunar New Year and a Recursive Sequence (线性代数、线性递推、数论、BSGS、扩展欧几里得算法)...
  2. 如何调整金格电子章服务器印章_如何利用OA系统进行电子公章、红头文件及打印的管理...
  3. HDU多校2 - 6763 Total Eclipse(贪心+并查集)
  4. docker 本地部署 mysql_Docker 部署Mysql 服务和Redis 服务的方法
  5. 剑指 Offer II 110. 所有路径
  6. 温习php一(apache和php的配置)
  7. 不喜欢在北京的感觉,删掉几篇北京生活的随笔。以后能忘掉这个地方就好了。...
  8. echarts折线图y轴根据数值自动_Python matplotlib 绘制双Y轴曲线图的示例代码
  9. 提取MapInfo地图数据中的空间数据解决方案
  10. 机器人启示录 百度影音_斯皮尔伯格筹备新作 《机器人启示录》有望启动
  11. windows查看本机ip地址
  12. 如何使用Origin轻松绘制三点线段图
  13. 网站后台操作手册(模板)
  14. MAC小技巧|Mac屏幕截图去除窗口阴影
  15. 接苹果游戏 小学生邀请赛T3
  16. qq文件对方接收后一定会有提示吗_QQ接收别人发的文件怎么设置不弹出接收信息...
  17. 如果你想专升本那就一定要看的专升本语文_文学常识完整版(五)
  18. 2022年全球及中国FIP-EMI垫片行业销售前景与运行规模研究报告
  19. 用互联网思维去做事之-(2)用户思维
  20. TSC打印机,利用javascript实现连续扫码自动打印,配置说明

热门文章

  1. 2021SC@SDUSC TencentOS Tiny源码分析(十) 邮箱队列模块一
  2. 下载sqlite3历史版本
  3. Matlab把bode函数的相频图相位转换成-180到180之间的方法
  4. c语言字符动画的实现
  5. php 怎么验证邮箱验证码,PHP验证邮箱是否合格
  6. Source Insight3.5软件使用及配置
  7. 基于Java+SpringBoot+Vue的大学生兼职系统设计与实现
  8. 计算机网络几种常见的协议
  9. 在线乞讨系统 Docker一键部署
  10. 人工智能PK人类?这部电影超前地预见了人类社会的终极形态