php连接mysql使用一段时间后连接数据库超时

单位的门户网站,用的PHP5.2.0+mysql5。
该网站用了一段时间以后,页面就加载不出来了。查了下原因,是访问数据库记录文章信息的表的查询超时。用navicat工具访问数据库,可以连接,但是打开该文章表速度会比较慢,但是10秒左右也能打的开。该表数据量不多,才4000多条记录而已。如果页面上没有访问该表的语句,页面可以正常加载,就是说访问其他表都正常,就这一张表会超时。
这种情况出现了3次了,平均1个月多点就出一次,每次只能把服务器重启才有用,单独重启数据库都没效果。
不知道到底是什么原因啊。

第1个回答  推荐于2016-09-29

    开启下mysql的慢查询. 看看是否存在过多的慢查询语句. 具体开启方式可以百度 

    在数据库访问比较慢的情况下. 执行 show processlist 看下进程是否过多.

 

找出慢查询之后, 可以针对sql进行优化.

加加索引应该就能解决.

my.cnf 的配置可以参考网上的方案进行优化....

(按说...4000条数据根本就不是个问题....)

追问

要等到下次出问题估计还要等个把月,问题在于内网平台不能长时间断着,没有充足的时间给我排查问题。而且考虑只有这一张表会出问题,我都怀疑是不是apache的问题。

追答

一般不会是apache的问题. 看下php的error_log吧

本回答被提问者和网友采纳
第2个回答  推荐于2018-05-13
php连接mysql读写数据,过一天就不work了。
经查发现mysql connection默认的超时时间为8小时。如果想让这个连接永久不超时,该怎么办呢?
有朋友说在mysql配置文件my.cfg中[mysqld]中添加
wait _timeout =31536000 (这里的这个数字的单位是秒,31536000秒=365天,这也是可设置的最大值)

这个办法不是最好的,因为这个"一年" != 永久..如何才能让该连接永久不超时呢?

比较完美的解决方法:

复制代码代码如下:
function reconnect(){
if (!mysql_ping ($this->db)) {
//here is the major trick, you have to close the connection (even though its not currently working) for it to recreate properly.
mysql_close($this->db);
$this->connect();
}
}

其中的mysql_ping()用来判断连接是否已经被断开了,若是断开了,关闭当前的链接,重新创建新的连接。
这样,只要发现连接被断开了,即可重新连接了。
第3个回答  2013-08-26
没遇到过就单独一张表不能访问的情况,,,
话说你用navicat,需要花10秒,重启数据库无效,重启服务器就好了,估计问题出在服务器上。
第4个回答  2013-08-26
服务器不行了,再要简化你的程序调用数据库的次数,最好就能生成静态