mysql too many_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_connections 和 wait_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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值