Warning: mysql_pconnect() [function.mysql-pconnect]: Can't connect to MySQL server on 'localhost' (10055) Warning: mysql_select_db() [function.mysql-select-db]: Can't connect to MySQL server on 'localhost' (10055) Warning: mysql_select_db() [function.mysql-select-db]: A link to the server could not be established Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in 网站每隔4-6小时 就出现上述 提示,重启mysql 失败,必须重启服务器,重启后正常。环境:系统2003  Apache-20+MySQL-5.0.77+PHP-5.2.9-2    IIS 只开了一个FTP已设置注册表 TcpTimedWaitDelay 为30    已设置mysql的my.ini key_buffer = 128Mmysql_connect 也换成了 mysql_pconnect()另有人说是 mysql临时文件夹满或C盘空间满,出问题的时候我看了 C盘只用了几百M,mysql临时文件夹找不到在哪至今仍不能解决问题,以前PHP都是用的别人空间 不存在这问题,这次自己搞服务器出现了这个问题,热切希望有高手能够解决

解决方案 »

  1.   

    这一星期,你分析日志的结果呢,有发现什么异常么mysql运行信息呢?哪里有异常么有没有用netstat -an或者工具比例fport看看端口信息呢?FTP负载量如何呢?如非必要,可不可以关闭一段时间,测试下
      

  2.   

    这个一般很端口资源有关系,你应该用netstat命令查看出问题的时候系统的端口资源状况,然后再进一步定位问题,然后查看IIS的系统日志和操作系统日志,看看有没有异常,以下是网上的部分解决方案,不一定和你的问题完全一样,仅供参考可能性一:
    应用程序需要快速释放和创建新连接, 但是由于 TIME_WAIT 中存在的连接超过默认值,导致较低吞吐量.解决方案参考这篇文章:http://www.hao32.com/webserver/55.html可能性二:
    其他服务的连接太多,比如FTP服务,耗尽了资源,参看这篇文章:http://hi.baidu.com/vili/blog/item/ea2c8e2621af791d8a82a180.html/cmtid/fbe3dc161f3bb615972b43d5可能性三:
    黑客攻击,参看这篇文章:http://blog.csdn.net/guwenzhong/archive/2009/05/11/4166872.aspx
      

  3.   

    有可能是mysql连接池最大连接数的问题
    http://www.111cn.net/database/110/mysql_connect-mysql_pconnect.htm
      

  4.   

    C盘只用了几百M??
    怎么可能才只用了几百M??mysql的data目录默认在C:\Documents and Settings下。自己找下。把data目录备份出来。
    删除mysql,以前用的myisam的方式运行,再装的时候改成innodb的方式运行,反之亦然。
      

  5.   

    顶楼上的,mysql的运行方式需要注意,以前碰到过这种情况,跟楼主的症状基本一致。
      

  6.   

    你以前安装过mysql吧? 
    卸载MySQL,然后手动删除my.ini文件,再把MySQL重新安装一次。
      

  7.   

    http://www.phprimer.com/viewtopic.php?f=2&p=1384#p1384很好奇为什么PHP没有数据库连接池,就翻了下PHP中mysql模块的源码,发现mysql_pconnect使用zend引擎的函数 pemalloc()将数据库连接资源存在了全局内存中。这样看来,mysql_pconnect的效率应该很高,但是为什么很少有人用呢?1.正常情况下当一个链接断开,你锁的表也会跟着解锁。但是长链接却永远不断开的,所以一个表万一一不小心锁了就一直锁着,除非你等着链接超时或者杀掉进程。同样的锁的问题也会在处理事务的时候发生。2.正常情况下当一个链接断开,临时表也会被删除。但是由于长链接并不断开,临时表就变得不那么临时了。所以,临时表如果在完成业务后没有被删除,将会继续存在,提供给复用这个长链接的客户端使用。3.如果PHP和mysql在同一台服务器上或者同一个局域网内,链接的时间是可以忽略不计的,所以用长链接不会得到任何益处。4.Apache不能很好的处理长链接。当Apache接收到一个新的客户端的请求,它并不会使用一个已经拥有可用长链接的子进程,而是生成一个新的子进程,这个子进程会打开一个新的数据库连接。这就造成空闲的额外进程,资源的浪费,并且,当达到最大连接数时还会导致错误。得不偿失啊~看看其他人怎么说的?有一个哥们说:(这哥们是老外,我直接翻译了)    一般情况下,你是不会想用mysql_pconnect的。这个函数是为了连接数据库高开销的场景设计的。典型的Mysql / Apache / PHP 场景中,Apache会创建很多空闲的子进程来等待web请求。这里的每个子进程都会打开并维持一个独立的Mysql链接。所以,如果Mysql Server限制50个链接,而Apache有大于50个的子进程在跑,每个子进程都会建立一个独立的Mysql链接,哪怕他们是空闲的(空闲的 httpd子进程不跟其它进程共享Mysql链接)。因此,即使你只有很少几个需要链接数据库的页面跑在一个繁忙的站点上,也会很快用光连接数,而实际上并没有全部被利用上。    所以,用mysql_connect()链接Mysql吧,除非,每次建立连接都要花去大把的时间。看看官方怎么说的:(地址:http://devzone.zend.com/node/view/id/686#fn1)    The mysql_pconnect() function was designed to provide a mechanism for reducing the cost of establishing and closing connections to the MySQL server. Unfortunately, due to an interaction between the architecture of the Apache server and the architecture of PHP, high traffic on a site that used pconnects could quickly clog up the MySQL server with many unused connections that could prevent many of the active connections from accessing the database.
    翻译下:    mysql_pconnect()函数设计的目的是为了提供一种机制来减少与Mysql服务器建立/断开连接的开销。不幸的是,由于Apache服务器架构和PHP架构之间的相互作用,一个使用长链接的高流量的网站会因为很多没有使用的链接迅速堵塞Mysql服务器,并且导致活跃的链接无法访问数据库。最后,俺们再看下手册上咋写的:    警告:在使用永久连接时还有一些特别的问题需要注意。例如在永久连接中使用数据表锁时,如果脚本不管什么原因无法释放该数据表锁,其随后使用相同连接的脚本将会被永久的阻塞,使得需要重新启动 httpd 服务或者数据库服务。另外,在使用事务处理时,如果脚本在事务阻塞产生前结束,则该阻塞也会影响到使用相同连接的下一个脚本。不管在什么情况下,都可以通过使用 register_shutdown_function() 函数来注册一个简单的清理函数来打开数据表锁,或者回滚事务。或者更好的处理方法,是不在使用数据表锁或者事务处理的脚本中使用永久连接,这可以从根本上解决这个问题(当然还可以在其它地方使用永久连接)。 
      

  8.   

    应该是Mysql的问题,用什么webserver都会这样。
      

  9.   

    很有可能是:mysql操作了最大的连接数.
    所以导致你操作失败. 请问你的网站访问量很大吗?
      

  10.   

    是不是mysql服务自动终止了,必须要重启
      

  11.   

    http://www.111cn.net/database/110/mysql_connect-mysql_pconnect.htm
      

  12.   

    不使用长连接就可以了!9楼引用的文章描述上有问题
    数据库的连接要分两步走:
    1、建立应用程序到数据库服务器的tcp/ip连接(暂且称作 物理连接)
    2、建立应用程序到数据库的应用连接执行长连接的php程序将自动关闭,应用连接。所以不存在临时表不能被删除的问题
    同时php维护一张保存有 物理连接 的表。当发现又有长连接请求时,就从表中取出一个空闲的连接来使用。若无空闲连接则创建新的物理连接。这个过程有如 OBDC、JDBC 中的连接池一般遗憾的是,由于 php 必须考虑到工作在两大类操作系统的两种工作模式。用通用代码维护连接表是一件非常困难的事情。对于使用者应该谅解开发者的缺陷,而作为有能力程序员则应积极加入开发团队。
      

  13.   

    网上有这样的说法:
    “前段时间跑在客户的几台服务器上的应用mysql连接都失败,出现10055的错误提示,这些应用都是通过localhost连接本机数据库的,因为之前同样的应用安装在其他客户的服务器上运行都是没问题的,排除程序的问题,后来查到10055是windows的一个错误号,意思是说虚拟空间不足,原来客户在安装windows的时候没有分配虚拟空间,调整windows的虚拟内存大小即解决问题。”
      

  14.   

    这样的问题一般都是资源不足造成的,
    pconnect不能减轻资源消耗,反而浪费。
    连接数过多不是这样的提示。
    tcp,多数时候不会涉及这东西,可能性不大
    临时文件夹等,这个方向对了,地方错了。再看看你的系统环境,如果经过其他环境考验,那么就是你服务器环境问题,
    而这种既是服务器环境问题,又很可能资源不足造成,那你就要看看系统内存,虚拟内存啥的了。
    因为它不是刚开始就出问题。不过,建议楼主找到问题原因后,再仔细分析分析应用。看是否你的某些应用导致系统性能大幅度降低。
      

  15.   

    其实个人觉得最有可能的还是服务器有问题,我用的是VPS,过俩天换个空间测试一下,找出答案与大家分享
      

  16.   

    同感pconnect不适用,在消耗很大的情况下用pconnect是一种手段
    但并不代表他适用所有情况。
      

  17.   

    把数据放进缓存,不用长连接,要么启动个守护进程,开个长连接,
    所有php子进程共用一个长连接进程。以上建议纯属参考