当前位置:C++技术网 > 资讯 > mysql的max_connections过多问题解决办法

mysql的max_connections过多问题解决办法

更新时间:2018-06-28 13:58:03浏览次数:1+次

        最近发现mysql一个奇怪的问题,好好的代码,运行一段时间后,数据库操作就失败了。一开始以为是操作了多个数据库,可能是数据库串了,经过检查,确实没有错。后来在Navicat工具刷新数据的时候,提示了mysql的连接数过多的问题(connections too many)。因为此前也出现过这样的问题,没想到现在又出来了。

        所以决定还是写一篇文章记录一下。以为我们需要通过修改配置文件来彻底解决这个问题。

        出现数据库连接数过多的问题,一方面可能是程序连接真的太多了,因为业务量大;另一方面则可能是代码结构设计不合理,导致大量的连接,短时间大量出现,并发总连接数超出限制,而且连接数的断开较慢。

        默认的情况下,mysql的最大连接数好像是150,不是十分确定。反正这个数很小,在程序短时间有大量的连接的时候,就可能超过这个限制,而导致数据库操作失败。

        从程序上优化连接数问题,不在这里讨论,我们来说说修改mysql配置文件。

    [mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
max_connections=1000
thread_cache_size=1000
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
default-character-set=utf8
    

            这是mysql数据库的配置文件。其中:     

    

        max_connections=1000
thread_cache_size=1000     

    

            是额外加上的。max_connections表示最大连接数,thread_cache_size表示缓存的线程数。max_connections不要放在[mysqld_safe]后面,可能不起作用,要放在前面哦。修改了配置文件后,要重启mysql。     

    

            在数据库查询工具或mysql命令行执行语句:     

    

        show variables like 'max_connections'     

    

            可以查看最大连接数。如果要查看实时的mysql连接数,执行:
    

    

        show status like 'Threads%'     

    

            结果如下:     

    

        
    

    

            Threads_connected表示当前的连接数,Threads_created表示创建过的连接数,Threads_running表示正在运行的连接数,即并发连接数。Threads_cached表示缓存的连接数。配置文件里的thread_cache_size即可设置这个缓存最大值。