服务器经常会出现mysql宕机网站无法访问的情况,错误提示如下:
Warning: mysql_connect(): Too many connections in...
这是由于mysql并发链接数过大引起的,连接数有可能是正常访问量过大,也有可能是恶意访问造成,也有可能是搜索引擎抓取时造成。
解决方法:
1、缓存数据查询结果,减少数据库查询次数;
2、php.ini中mysql.connect_timeout设置过大,一般mysql.connect_timeout=20基本差不多,过大会造成mysql同时链接数过大;
3、修改 /etc/my.cnf 文件,改这个参数:max_connections = 512,这个参数是最大连接数,默认值只有 100,修改后重启mysql生效;
如下:
mysql> show variables like ‘max_connections‘;
+———————–+——-+
| Variable_name | Value |
+———————–+——-+
| max_connections | 256 |
+———————–+——-+
mysql> show status like ‘max%connections‘;
+———————–+——-+
| Variable_name | Value |
+—————————-+——-+
| max_used_connections | 256|
+—————————-+——-+
max_used_connections / max_connections * 100% (理想值≈ 85%)
如果max_used_connections跟max_connections相同 那么就是max_connections设置过低或者超过服务器负载上限了,低于10%则设置过大。
参见《Mysql优化配置》http://www.cnblogs.com/Bozh/archive/2013/01/22/2871545.html
4、多用 show processlist 检查mysql的进程情况,优化 sql 语句;
5、对恶意访问做检测和屏蔽。