mysql连接数过多 解决方案

mysql 默认链接数是100个 最大是16384。

原则:想尽一切办法不重启

导致原因:

出现这种错误明显就是 mysql_connect 之后忘记 mysql_close;
当大量的connect之后,就会出现Too many connections的错误,mysql默认的连接为100个,而什么情况下会出现这种错误呢?

正常的mysql_connect 之后调用 mysql_close()关闭连接
但在连接错误时,会者mysql_real_query()出现错误退出时,可能忘记mysql_close();
所以在程序return 之前一定要判断是否close(),最稳妥的方法就是在写任何函数时都只有一个出口!

查看链接:

查看当前连接数

./mysqladmin -uroot -p1234.com status
Uptime: 1370150  Threads: 1 (当前连接数) Questions: 79  Slow queries: 0  Opens: 33  Flush tables: 1  Open tables: 26  Queries per second avg: 0.000
./mysql -uroot -p1234.com -e ‘show status‘ | grep -i  Threads
Delayed_insert_threads    0
Slow_launch_threads    0
Threads_cached    1
Threads_connected    1
Threads_created    2
Threads_running    1 ##(当前连接数)
mysql> show status like ‘Threads%‘;
+-------------------+-------+
| Variable_name    | Value |
+-------------------+-------+
| Threads_cached    | 1    |
| Threads_connected | 1    |
| Threads_created  | 2    |
| Threads_running  | 1    |   ###当前连接数
+-------------------+-------+
4 rows in set (0.00 sec)

查看最大连接数

[[email protected] bin]# ./mysql -uroot -p1234.com -e ‘show variables‘ | grep max_connections
max_connections    500
mysql> show global variables like ‘max_conn%‘;
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| max_connect_errors | 10    |
| max_connections    | 500  |## 最大连接数
+--------------------+-------+
2 rows in set (0.00 sec)

解决方法:

想尽一切办法不重启

这种情况一般是进不去数据库了,修改配置文件得重启,对于线上的数据库风险太大了,进入数据库用sql修改,现在是进不去了

方法1:

使用gdb工具 不用进入数据库,不用重启数据库 方法如下:

[[email protected] bin]# gdb -p $(cat /data/mydata/xxx.pid) -ex "set max_connections=500" -batch
[New LWP 7667]
[New LWP 4816]
[New LWP 341]
[New LWP 338]
[New LWP 337]
[New LWP 336]
[New LWP 335]
[New LWP 331]
[New LWP 330]
[New LWP 329]
[New LWP 328]
[New LWP 327]
[New LWP 326]
[New LWP 325]
[New LWP 324]
[New LWP 323]
[New LWP 322]
[Thread debugging using libthread_db enabled]
0x00000035654df1b3 in poll () from /lib64/libc.so.6

查看mysql pid位置的方法

在配置文件 my.cnf里查找

用 ps -ef | grep mysql 查找

mysql> show variables like ‘%pid%‘;
+---------------+----------------------+
| Variable_name | Value                |
+---------------+----------------------+
| pid_file      | /data/mydata/xxx.pid |
+---------------+----------------------+
1 row in set (0.00 sec)
修改完毕后 ,尝试重新进入数据库,并查看链接数

这种方法设置后,只是暂时的,数据库重启后,会变为原来的数值,要想永久,设置完后修改配置文件my.cnf


方法2

前提是还可以进入数据库

进入数据库

设置新的最大连接数为200:mysql> set GLOBAL max_connections=200

显示当前运行的Query:mysql> show processlist

显示当前状态:mysql> show status

退出客户端:mysql> exit

这种方法设置后,只是暂时的,数据库重启后,会变为原来的数值,要想永久,设置完后修改配置文件my.cnf

方法3:

需要重启数据库

修改 my.conf

max_connection = 1000;

模拟mysql连接数过多

脚本内容

#!/bin/bash
set j=2
while true
do
        let "j=j+1"
/usr/local/mysql/bin/mysqlslap -a -c 500 -i 10 -uroot -p1234.com
done

运行此脚本  ,然后导致mysql连接数过多无法连接,多试几次确定无法连接  再用gdb工具测试

时间: 2024-10-16 18:00:30

mysql连接数过多 解决方案的相关文章

mysql连接数过多解决方案

mysql 默认链接数是100个 最大是16384. 原则:想尽一切办法不重启 导致原因: 出现这种错误明显就是 mysql_connect 之后忘记 mysql_close:当大量的connect之后,就会出现Too many connections的错误,mysql默认的连接为100个,而什么情况下会出现这种错误呢? 正常的mysql_connect 之后调用 mysql_close()关闭连接但在连接错误时,会者mysql_real_query()出现错误退出时,可能忘记mysql_clo

Mycat占用mysql连接数过多

背景:mariadb,mycat中间件.问题:DB连接数过多:开发使用程序使用连接池连mycat:DB待优化项: interactive_timeout,wait_timeout 都是8小时默认值.mycat配置:100个分片库,和其他业务库.现在分片库用到16分片,后面尚未使用.当前DB最大连接数:3000mycat 版本:当前线上的mycat版本是1.5.8版本,推荐以后线上使用最稳定的 mycat1.6.5版本. 经DB和开发碰面了解 这两个timeout时间不能缩短,所以常规的优化手段不

ZooKeeper客户端连接数过多

ZooKeeper限制客户端连接数 问题: 最近发现ZooKeeper服务器上的连接数过多,都是连接zookeeper的. 解决方案: 通过查询分析,发现zookeeper的一个客户端使用有问题,创建的连接过多导致的. zookeeper有没有相应的功能能做下限制呢? 查看zookeeper的配置参数,可以发现zookeeper的可以通过相应的配置来限制某ip的连接数. maxClientCnxns 这个配置参数将限制连接到ZooKeeper的客户端的数量,限制并发连接的数量,它通过IP来区分不

RDS MySQL 连接数满情况的处理

RDS MySQL 连接数满情况的处理 RDS MySQL 连接数满有2种情况 1. 空闲连接过多 原因: 应用使用长连接模式 - 对于长连接模式(比如Java应用),应用侧应该配置连接池.连接池的初始连接数设置过高,应用启动后建立多个到RDS实例空闲连接.如果出现连接数满(too many connections)不能连接的问题,请检查连接池是否启用了复用连接功能. 应用使用短连接模式 - 对于短连接模式(比如PHP应用),出现大量的空闲连接说明应用没有在查询执行完毕后显式的关闭连接.用户应该

mysql 设置/查看mysql连接数

mysql数据库连接数过多导致系统出错,系统不能连接数据库,关键要看两个数据: 1.数据库系统允许的最大可连接数max_connections.这个参数是可以设置的.如果不设置,默认是100.最大是16384. 2.数据库当前的连接线程数threads_connected.这是动态变化的. 查看max_connections.max_connections的办法见后. 如果 threads_connected == max_connections 时,数据库系统就不能提供更多的连接数了,这时,如

MySQL连接数超过限制的解决方法

最近网站出现 User 数据库名称 has already more than 'max_user_connections' active connections 的报错,网站瘫痪.有必要研究下这个问题. max_user_connections 是 MySQL 用户连接数的最大值设置,整段语句的意思是:服务器的 MySQL 的最大连接数参数设置不足.解决方法:修改 MySQL 安装目录下 my.ini 或者 my.cnf 文件内的 max_user_connections 参数的数值,重启 M

mysql连接数太小,导致网站报错mysql:Too many connections

2017.9.14 一个网站上线前压力测试 网页打开报错mysql:Too many connections 一看就是mysql连接数设置过小导致的 进mysql查看连接数设置 show variables like '%max_connections%'; 只有151,怎么可以,果断决定提高到1000 PS:服务器性能可以的,哈哈 打开MySQL配置文件my.cnf添加 max_connections=1000  重启MySQL即可. 再次测试没问题咯! 方法二:命令行临时修改. set gl

mysql 连接数的最大数

mysql默认最大连接数是100,增加加默认MYSQL连接数的方法有两个 方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini(windows) 或 my.cnf(linux环境)查找 max_connections=100   修改为 max_connections=1000 服务里重起MYSQL即可 方法二: 客户端登录:mysql -u username -p password 设置新的最大连接数为200:mysql> set GLOBAL max_connections=

Navicat MySQL连接Linux下MySQL的问题解决方案

Error1: 2003:Can't connect to MySQL server on 'localhost' 解决方法:关闭Linux的防火墙功能. Linux代码   #chkconfig iptables off #reboot Error2: 1130 - Host'ClientIP' is not allowed to connect to this MySQL server 解决方法:使用root用户登陆Linux,更改容许登陆的IP地址范围. Mysql代码   mysql>g