mysql连接数过多 解决方案 阅读目录

以你之姓@ 2022-04-14 03:28 262阅读 0赞
  • 导致原因:
  • 查看链接:
  • 解决方法:
  • 模拟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(),最稳妥的方法就是在写任何函数时都只有一个出口!

回到顶部

查看链接:

查看当前连接数

  1. ./mysqladmin -uroot -p1234.com status
  2. Uptime: 1370150 Threads: 1 (当前连接数) Questions: 79 Slow queries: 0 Opens: 33 Flush tables: 1 Open tables: 26 Queries per second avg: 0.000

复制代码

  1. ./mysql -uroot -p1234.com -e 'show status' | grep -i Threads
  2. Delayed_insert_threads 0
  3. Slow_launch_threads 0
  4. Threads_cached 1
  5. Threads_connected 1
  6. Threads_created 2
  7. Threads_running 1 ##(当前连接数)

复制代码

复制代码

  1. mysql> show status like 'Threads%';
  2. +-------------------+-------+
  3. | Variable_name | Value |
  4. +-------------------+-------+
  5. | Threads_cached | 1 |
  6. | Threads_connected | 1 |
  7. | Threads_created | 2 |
  8. | Threads_running | 1 | ###当前连接数
  9. +-------------------+-------+
  10. 4 rows in set (0.00 sec)

复制代码

查看最大连接数

  1. [root@xxx bin]# ./mysql -uroot -p1234.com -e 'show variables' | grep max_connections
  2. max_connections 500

复制代码

  1. mysql> show global variables like 'max_conn%';
  2. +--------------------+-------+
  3. | Variable_name | Value |
  4. +--------------------+-------+
  5. | max_connect_errors | 10 |
  6. | max_connections | 500 |## 最大连接数
  7. +--------------------+-------+
  8. 2 rows in set (0.00 sec)

复制代码

回到顶部

解决方法:

想尽一切办法不重启

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

方法1:

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

复制代码

  1. [root@xxx bin]# gdb -p $(cat /data/mydata/xxx.pid) -ex "set max_connections=500" -batch
  2. [New LWP 7667]
  3. [New LWP 4816]
  4. [New LWP 341]
  5. [New LWP 338]
  6. [New LWP 337]
  7. [New LWP 336]
  8. [New LWP 335]
  9. [New LWP 331]
  10. [New LWP 330]
  11. [New LWP 329]
  12. [New LWP 328]
  13. [New LWP 327]
  14. [New LWP 326]
  15. [New LWP 325]
  16. [New LWP 324]
  17. [New LWP 323]
  18. [New LWP 322]
  19. [Thread debugging using libthread_db enabled]
  20. 0x00000035654df1b3 in poll () from /lib64/libc.so.6

复制代码

查看mysql pid位置的方法

在配置文件 my.cnf里查找

用 ps -ef | grep mysql 查找

复制代码

  1. mysql> show variables like '%pid%';
  2. +---------------+----------------------+
  3. | Variable_name | Value |
  4. +---------------+----------------------+
  5. | pid_file | /data/mydata/xxx.pid |
  6. +---------------+----------------------+
  7. 1 row in set (0.00 sec)

复制代码

  1. 修改完毕后 ,尝试重新进入数据库,并查看链接数

这种方法设置后,只是暂时的,数据库重启后,会变为原来的数值,要想永久,设置完后修改配置文件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连接数过多

脚本内容

复制代码

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

复制代码

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

发表评论

表情:
评论列表 (有 0 条评论,262人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Mysql连接大导致连接超时的问题

    春节访问量激增,负载压力很大,程序处理较慢,然后就调整项目中的线程池和数据库连接数。可是还是没有太好的提高,追根溯源,发现数据库连接受到限制。虽然是做了读写分离,但是还是没抗住