Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 603|回复: 0

mysql连接数过多解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-9-2 13:23:43 | 显示全部楼层 |阅读模式
    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)

    查看最大连接数

    [root@xxx 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工具 不用进入数据库,不用重启数据库 方法如下:
    [root@xxx 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工具测试

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-22 02:06 , Processed in 0.056207 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表