mysql连接的问题

在使用php处理数据库的时候,我们会遇到各种问题,比如没有权限之类的,这些问题只要根据错误提示进行改正就好了;然而在使用后台脚本进行业务逻辑的处理的时候,一般由于需要处理的数据量比较大,因此处理的时间也就比较长,这个时候数据库的连接时间的重要性就体现出来了。

与数据库连接的参数,在mysql里面主要是几个Timeout配置,例如wait_timeout, interval_timeout, connnect_timeout, 这些参数的详细说明可以从网上获得,我就不直接COPY啦。平时我们对mysql做优化的时候会将这些值进行修改,减少sleep的连接。比如设置成为10s等,当然这对前端的php处理不会产生任何影响,因为你不可能让你的一个页面处理需要用户等待十秒以上。然而这些对于后端的长时间的连接会产生一些意想不到的事情。

 

这里将我自己遇到的一些问题在这里罗列一下:

1.主要是在整个程序中使用唯一的连接,而这个连接需要维持的时间至少在半个小时到一个小时,这个过程中就出现了连接时间不够,自动断掉,而这个时候程序获取连接失败,或者先前的连接存在,但是已经是一个失效的连接资源,于是程序在这个地方崩溃。

2.下面也是遇到的一个问题:直接写上错误的信息:

PHP Warning: mysql_connect(): Lost connection to MySQL server at 'reading initial communication packet', system error: 111

 

分析一下问题的产生,这里只是概括一下,对于出现的错误,可能会根据你的程序写法不同而不同,比如程序里面还出现过嵌套递归超过一百次,也是因为每次连接都连不上。

这样问题的出现,解决办法就是将timeout时间设置的长一点; 另外再执行的过程中可以将失效的连接关闭,重新请求生成新的连接。

 

这里有一点也需要说明:在使用memcache的时候,也是因为长时间使用一个实例(自己对memcahe操作做了封装),容易导致操作失败,这个时候我们可以多生成几个,或者使用循环执行三次。

大家如果碰到相似的问题,可以和我交流一下

 

posted @ 2010-09-03 09:55  库从志  阅读(383)  评论(0编辑  收藏  举报