今天在发现网站日志发现有大量的ERROR 1040:Too many connections连接错误了,这个是mysql连接过多啊,但本站几乎为html页面了,下面小编来给各位同学介绍解决办法.
出现此错误的原因,一种是访问量确实很高,MySQL服务器顶不住,这个时候就要考虑增加从服务器分散读压力,另外一种情况是MySQL配置文件中max_connections值过小.
分析原因:mysql的默认连接上只有100,也就是说连接数据超过100 就会有可能出现 Too Many Connections.
修改my.cnf配置文件添加并需要重启:
- [mysqld]
- wait_timeout=600
- interactive_timeout=600
查询MySQL的最大连接数,代码如下:
- mysql>showvariableslike'max_connections';
- +-----------------+-------+
- |Variable_name|Value|
- +-----------------+-------+
- |max_connections|100|
- +-----------------+-------+
- 1rowinset(0.00sec)
查询MySQL响应的最大连接数,代码如下:
- mysql>showglobalstatuslike'max_used_connections';
- +----------------------+-------+
- |Variable_name|Value|//phpfensi.com
- +----------------------+-------+
- |Max_used_connections|5|
- +----------------------+-------+
- 1rowinset(0.00sec)
说明:本地环境没什么参考价值,但是就上面的数据而言,MySQL过去所响应的最大连接数小于其允许的最大连接数,所以不会出现1040错误.
MySQL比较理想的最大连接数计算方式为,代码如下:
max_used_connections / max_connections * 100% ≈ 85%
即最大连接数占上限连接数的85%左右,如果发现比例在10%以下,MySQL服务器连接数上限设置的过高了.
问题找到解决办法:
1、mysql -u root -p 进入不了,同样出现上述错误.
2、修改/etc/mysql/my.cnf,ubuntu系统,其他系统在/etc/my.cnf,代码如下:
- [mysqld]
- port=3306
- #socket=MySQL
- skip-locking
- set-variable=key_buffer=16K
- set-variable=max_allowed_packet=1M
- set-variable=thread_stack=64K
- set-variable=table_cache=4
- set-variable=sort_buffer=64K
- set-variable=net_buffer_length=2K
- set-variable=max_connections=1000
3、重启,代码如下:mysql /etc/init.d/mysql restart 搞定了.