Error connecting to MySQL: Too many connections(code 1040)的错误解决方法
文章目录
- 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)
Threads_cached
:MySQL
管理的线程池中还有多少可以被复用的资源。Threads_connected
:这个数值指的是打开的连接数。Threads_created
:表示创建过的线程数。
如果发现Threads_created
值过大的话,表明MySQL
服务器一直在创建线程,这也是比较耗资源。可以适当增加配置文件中的thread_cache_size
值,如下代码所示:
mysql> set global thread_cache_size=60;
Query OK, 0 rows affected (0.00 sec)
Threads_running
:这个数值指的是激活的连接数,这个数值一般远低于connected
数值。
Threads_connected
跟show 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_connected
跟show 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. 解决问题
我们在修改最大连接数时,同时也要修改连接时长。
- 修改最大连接数
因为,数据库的并发数超过了最大的连接数,我们可按如下命令修改最大连接数:
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
的连接数的时长。
- 修改连接时长
我们可以使用如下命令,修改连接时长,自动杀死线程。
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)的错误解决方法相关推荐
- Linux下MySql出现#1036 – Table ‘ ‘ is read only 错误解决方法
Linux下MySql出现#1036 – Table ' ' is read only 错误解决方法 参考文章: (1)Linux下MySql出现#1036 – Table ' ' is read o ...
- windows 安装RabbitMQ 遇到 epmd error for host xxx: address (cannot connect to host/port)错误解决方法
我在windows上安装RabbitMQ后在运行rabbitmq-server之后报错: "WARNING: Using RABBITMQ_ADVANCED_CONFIG_FILE: C:\ ...
- 连接mysql报2059错_MySQL连接2059错误解决方法
开始学MySQL,结果安装完SQLyog后连接不了,总是弹出提示2059错误.在网上查找了一下才发现原因,MySQL8.0.11版本启用了新特性,用户登录加密规则改为了caching_sha2_pas ...
- mysql err 1349_MySQL 视图 第1349号错误解决方法
代码如下: CREATE OR REPLACE VIEW BLOG_V_ADMIN (ID,NICKNAME,SEX,EMAIL,PHONE,QQ,MSN,HTTP,REGISTER_TIME, IP ...
- mysql Access denied for user root@localhost错误解决方法总结
代码如下 复制代码 # /etc/init.d/mysql stop # mysqld_safe --user=mysql --skip-grant-tables --skip-networking ...
- Linux环境下MySQL报Table ‘xxx‘doesn‘t exist错误解决方法
问题:程序报Table 'xxx' doesn't exist 的错误,但是查看数据库发现该表已经存在且字母也没有拼错.原因:Linux 上的mysql默认是区分大小写导致的. 解决:改动mysql的 ...
- Linux环境下MySQL报Table 'xxx' doesn't exist错误解决方法
问题:程序报Table 'xxx' doesn't exist 的错误,但是查看数据库发现该表已经存在且字母也没有拼错. 原因:Linux 上的mysql 默认是区分大小写导致的. 解决:改动mysq ...
- Linux下MySQL报Table 'xxx' doesn't exist错误解决方法
今天将项目用docker打包放在centos环境中出现了一个奇葩的问题: 控制台总是报错,说我的表不存在,可是我通过select查询之后发现表存在啊. 经过一番查询才发现原因是: linux下mysq ...
- 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 ...
最新文章
- Codeforces 1106F Lunar New Year and a Recursive Sequence (线性代数、线性递推、数论、BSGS、扩展欧几里得算法)...
- 如何调整金格电子章服务器印章_如何利用OA系统进行电子公章、红头文件及打印的管理...
- HDU多校2 - 6763 Total Eclipse(贪心+并查集)
- docker 本地部署 mysql_Docker 部署Mysql 服务和Redis 服务的方法
- 剑指 Offer II 110. 所有路径
- 温习php一(apache和php的配置)
- 不喜欢在北京的感觉,删掉几篇北京生活的随笔。以后能忘掉这个地方就好了。...
- echarts折线图y轴根据数值自动_Python matplotlib 绘制双Y轴曲线图的示例代码
- 提取MapInfo地图数据中的空间数据解决方案
- 机器人启示录 百度影音_斯皮尔伯格筹备新作 《机器人启示录》有望启动
- windows查看本机ip地址
- 如何使用Origin轻松绘制三点线段图
- 网站后台操作手册(模板)
- MAC小技巧|Mac屏幕截图去除窗口阴影
- 接苹果游戏 小学生邀请赛T3
- qq文件对方接收后一定会有提示吗_QQ接收别人发的文件怎么设置不弹出接收信息...
- 如果你想专升本那就一定要看的专升本语文_文学常识完整版(五)
- 2022年全球及中国FIP-EMI垫片行业销售前景与运行规模研究报告
- 用互联网思维去做事之-(2)用户思维
- TSC打印机,利用javascript实现连续扫码自动打印,配置说明