签到成功

知道了

CNDBA社区CNDBA社区

mysql连接数过多 解决方案

2021-10-02 09:23 1154 0 原创 mysql
作者: hbhe0316

出现这种错误明显就是 mysql_connect 之后忘记 mysql_close;
当大量的connect之后,就会出现Too many connections的错误,mysql默认的连接为100个,而什么情况下会出现这种错误呢?
正常的mysql_connect 之后调用 mysql_close()关闭连接
但在连接错误时,会者mysql_real_query()出现错误退出时,可能忘记mysql_close();
所以在程序return 之前一定要判断是否close(),最稳妥的方法就是在写任何函数时都只有一个出口!
回到顶部
查看链接:
查看当前连接数

http://www.cndba.cn/hbhe0316/article/4835
http://www.cndba.cn/hbhe0316/article/4835

./mysqladmin -uroot -pwwwwww 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 -pwwwwww -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)

查看最大连接数
[root@db01 bin]# ./mysql -uroot -p1234.com -e ‘show variables’ | grep max_connections
max_connections 500

http://www.cndba.cn/hbhe0316/article/4835

mysql> show global variables like ‘max_conn%’;
+——————————+———-+
| Variable_name | Value |
+——————————+———-+
| max_connect_errors | 10 |
| max_connections | 500 |## 最大连接数
+——————————+———-+
2 rows in set (0.00 sec)http://www.cndba.cn/hbhe0316/article/4835

回到顶部
解决方法:
想尽一切办法不重启http://www.cndba.cn/hbhe0316/article/4835http://www.cndba.cn/hbhe0316/article/4835

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

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

[root@db01 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位置的方法

http://www.cndba.cn/hbhe0316/article/4835

在配置文件 my.cnf里查找
用 ps -ef | grep mysql 查找http://www.cndba.cn/hbhe0316/article/4835http://www.cndba.cn/hbhe0316/article/4835

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连接数过多
脚本内容http://www.cndba.cn/hbhe0316/article/4835

#!/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工具测试

版权声明:本文为博主原创文章,未经博主允许不得转载。

mysql

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
hbhe0316

hbhe0316

关注

1.只有承认无知,才能装下新的东西; 2.进步来自一点点滴滴的积累; 3.广博让你更优秀,而专业让你无法替代; 4.挫折和失败能够转换为一种财富。

  • 889
    原创
  • 1
    翻译
  • 13
    转载
  • 24
    评论
  • 访问:1039194次
  • 积分:1523
  • 等级:核心会员
  • 排名:第6名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ