MySQL提示“too many connections”的解决办法
登陆到MySQL的提示符下,数据show processlist这个命令,可以得到所以连接到这个服务器上的MySQL连接:mysql> show processlist; +———+——+———————+———+———+——+——-+——————-+ | Id | User | Host | db | Command | Time | State | Info | +———+——+———————+———+———+——+——-+——————-+ | 1180421 | ur | 202.103.96.68:49754 | test1 | Sleep | 1 | | NULL | | 1180427 | ur | 202.103.96.68:55079 | test2 | Sleep | 1 | | NULL | | 1180429 | ur | 202.103.96.68:55187 | testdba | Sleep | 0 | | NULL | | 1180431 | ur | 202.103.96.68:55704 | testdba | Sleep | 0 | | NULL | | 1180437 | ur | 202.103.96.68:32825 | test1 | Sleep | 1 | | NULL | | 1180469 | ur | 202.103.96.68:58073 | testdba | Sleep | 0 | | NULL | | 1180472 | ur | 83.136.93.131:47613 | test2 | Sleep | 8 | | NULL | | 1180475 | root | localhost | NULL | Query | 0 | NULL | show PROCESSLIST | +———+——+———————+———+———+——+——-+——————-+ 8 rows in set (0.00 sec)
mysql>
然后,你可以看到像上面这样的MySQL数据连接列表,而且每一个都会有一个进程ID号(在上表的第一列)。我们只要输入这样的命令:mysql> kill 1180421; Query OK, 0 rows affected (0.00 sec)
mysql>
其中1180421为你在进程列表里找到并且要杀掉的进程号。
产生这种问题的原因是:
连接数超过了 MySQL 设置的值,与 max_connections 和 wait_timeout 都有关系。wait_timeout 的值越大,连接的空闲等待就越长,这样就会造成当前连接数越大。
解决方法:
修改MySQL配置文件/etc/my.cnf,设置成max_connections=1000,wait_timeout=5。如果没有此项设置可以自行添加,修改后重启MySQL服务即可。要不经常性报此错误,则要对服务器作整体性能优化
注:为了防止发生too many connections时候无法登录的问题,mysql manual有如下的说明:
mysqld actually allows max_connections+1
clients to connect. The extra connection is reserved for use by accounts that have the SUPER
privilege. By granting the SUPER
privilege to administrators and not to normal users (who should not need it), an administrator can connect to the server and use SHOW PROCESSLIST
to diagnose problems even if the maximum number of unprivileged clients are connected.
因此, 必须只赋予root用户的SUPER权限,同时所有数据库连接的帐户不能赋予SUPER权限。前面说到的报错后无法登录就是由于我们的应用程序直接配置的root用户
总结,解决问题的最终方法:
1.修改配置文件/etc/my.cnf,调整连接参数
2.检查程序代码,对于没有关闭的链接及时进行关闭
注:最好不要在代码中用root用户连接
相关文章
- MySQL删除表提示Cannot truncate a table referenced in a foreign key constraint解决办法
- MySQL自增长字段的优势及其应用(mysql自增长字段)
- MySQL端口占用:深入解析(mysql端口占用)
- Mysql:一步一步指导MySQL安装版:一步一步指引安装(mysql安装版安装)
- 远程访问MySQL:简明指南(如何远程访问mysql)
- 连接Mysql提示Can’t connect to local MySQL server through socket的解决方法
- MySQL数据库驱动:实现数据交互更加高效(mysql数据库驱动)
- 机制MySQL中大于、小于比较运算的索引优化机制(mysql大于小于索引)
- 告警MySQL 慢日志告警:谁在拖累系统?(mysql慢日志)
- 如何在 MySQL 中进行时间范围查询?(mysql时间范围查询)
- 无法载入MySQL扩展:解决办法来了!(无法载入mysql扩展)
- ASP如何使用代码登录MySQL数据库(asp登陆mysql代码)
- ABP 框架连接 MySQL 数据库实现数据存取(abp链接mysql)
- MySQL 1064错误排查与解决办法(1064 mysql报错)
- MySQL数据遭误删如何恢复数据快速解决办法分享(mysql不小心删了数据)
- MYSQL收费了 了解MySQL开源版的最新政策(mysql不再免费了吗)
- 如何解读MySQL提示信息提升数据库管理水平(mysql下面有提示)
- MySQL表排序掌握两张表的技巧(mysql 两张表排序)
- 解决办法MySQL下载无法打开的原因及应对方法(mysql下载怎么打不开)
- Mysql 数据库丢失别慌来了解一下 MySQL 不见的可能原因及解决办法(mysql不见)
- MySQL本地登陆失败怎么办(mysql 不能本地登陆)
- MySQL不能连接,应对解决办法(mysql不支持怎么解决)
- 无错误提示,MySQL启动失败应该如何处理(mysql不报错无法启动)
- Mysql执行中断找找解决办法(mysql不执行 中断)