zoukankan      html  css  js  c++  java
  • MySQL提示“too many connections”的解决办法

    今天生产服务器上的MySQL出现了一个不算太陌生的错误“Too many connections”。平常碰到这个问题,我基本上是修改/etc/my.cnf的max_connections参数,然后重启数据库。但
    是生产服务器上数据库又不能随便重启。

    没办法,只好想办法手动去释放一些没用的连接。
    登陆到MySQL的提示符下,数据show processlist这个命令,可以得到所以连接到这个服务器上的MySQL连接:

    mysql> show  processlist;
    +---------+------+---------------------+---------+---------+------+-------+-------------------+
    | Id      | User | Host                | db      | Command | Time | State | Info              |
    +---------+------+---------------------+---------+---------+------+-------+-------------------+
    | 1180421 | ur   | 202.103.96.68:49754 | test1   | Sleep   |    1 |       | NULL              |
    | 1180427 | ur   | 202.103.96.68:55079 | test2   | Sleep   |    1 |       | NULL              |
    | 1180429 | ur   | 202.103.96.68:55187 | testdba | Sleep   |    0 |       | NULL              |
    | 1180431 | ur   | 202.103.96.68:55704 | testdba | Sleep   |    0 |       | NULL              |
    | 1180437 | ur   | 202.103.96.68:32825 | test1   | Sleep   |    1 |       | NULL              |
    | 1180469 | ur   | 202.103.96.68:58073 | testdba | Sleep   |    0 |       | NULL              |
    | 1180472 | ur   | 83.136.93.131:47613 | test2   | Sleep   |    8 |       | NULL              |
    | 1180475 | root | localhost           | NULL    | Query   |    0 | NULL  | show  PROCESSLIST |
    +---------+------+---------------------+---------+---------+------+-------+-------------------+
    8 rows in set (0.00 sec)

    mysql>

    然后,你可以看到像上面这样的MySQL数据连接列表,而且每一个都会有一个进程ID号(在上表的第一列)。我们只要输入这样的命令:

    mysql> kill 1180421;
    Query OK, 0 rows affected (0.00 sec)

    mysql>

    其中1180421为你在进程列表里找到并且要杀掉的进程号。

    产生这种问题的原因是

    连接数超过了 MySQL 设置的值,与 max_connectionswait_timeout  都有关系。wait_timeout 的值越大,连接的空闲等待就越长,这样就会造成当前连接数越大。

    解决方法

    修改MySQL配置文件/etc/my.cnf,设置成max_connections=1000,wait_timeout=5。如果没有此项设置可以自行添加,修改后重启MySQL服务即可。要不经常性报此错误,则要对服务器作整体性能优化

    关于MySQL优化----wait_timeout和interactive_timeout的设置问题的疑惑


    MySQL中的配置参数interactive_timeout和wait_timeout 
    MySQL服务器所支持的最大连接数是有上限的,因为每个连接的建立都会消耗内存,因此我们希望客户端在连接到MySQL Server处理完相应的操作后,应该断开连接并释放占用的内存。如果你的MySQL Server有大量的闲置连接,他们不仅会白白消耗内存,而且如果连接一直在累加而不断开,最终肯定会达到MySQL Server的连接上限数,这会报'too many connections'的错误。对于wait_timeout的值设定,应该根据系统的运行情况来判断。在系统运行一段时间后,可以通过show processlist命令查看当前系统的连接状态,如果发现有大量的sleep状态的连接进程,则说明该参数设置的过大,可以进行适当的调整小些。

    我按照这个提示 操作如下
    mysql> show variables like '%timeout%';
    +-------------------------+-------+
    | Variable_name           | Value |
    +-------------------------+-------+
    | connect_timeout         | 10    |
    | delayed_insert_timeout  | 300   |
    | interactive_timeout     | 28800   |
    | net_read_timeout        | 30    |
    | net_write_timeout       | 60    |
    | slave_net_timeout       | 3600  |
    | table_lock_wait_timeout | 50    |
    | wait_timeout            | 28800   |
    +-------------------------+-------+
    8 rows in set (0.00 sec)

    mysql> set global  wait_timeout=300 ,interactive_timeout=300;

    退出 重新登录。。

    mysql> show variables like '%timeout%';
    +-------------------------+-------+
    | Variable_name           | Value |
    +-------------------------+-------+
    | connect_timeout         | 10    |
    | delayed_insert_timeout  | 300   |
    | interactive_timeout     | 300   |
    | net_read_timeout        | 30    |
    | net_write_timeout       | 60    |
    | slave_net_timeout       | 3600  |
    | table_lock_wait_timeout | 50    |
    | wait_timeout            | 300   |
    +-------------------------+-------+
    8 rows in set (0.00 sec)

  • 相关阅读:
    ExpandableListView实现子Item的点击事件
    使用AndroidStudio自动生成JavaDoc文档
    将Asset中的数据库文件拷贝出来使用
    拦截webview调用系统浏览器打开链接
    配置国内 Docker Registry Mirror
    解决mysql 主从数据库同步不一致的方法
    讯时网关路由规则小结
    Docker 导出 & 导入
    Centos 7 安装Docker-ce记录
    Go Rand小结
  • 原文地址:https://www.cnblogs.com/wyy123/p/7146619.html
Copyright © 2011-2022 走看看