从我可以告诉这是我的本地服务器上已经发生的最近的错误:
Can't connect to MySQL server on 'localhost' (10048).
我的网站将工作一段时间,然后它会随机抛出这个错误,然后再次开始工作。 有关如何解决这个问题的任何build议? 我在网上search和大多数人声称这是一个基于Windows的错误,需要一个registry修复,但我想看看是否有其他人遇到这个问题,有什么更好的build议? 谢谢!
我build议在发生这个错误时查看“netstat -ano”的输出。 如果这是Windows Server 2003,则默认临时端口范围仅为1024-5000。 如果此端口范围已满,则无法创build新的出站连接,包括“出站”到本地主机。 你可以通过改变registry中的MaxUserPort设置来解决这个问题,如果netstat显示你有很多连接处于TIME_WAIT状态,那么可能还有TCPTimedWaitDelay设置。 'netstat -ano | find / C':''会给你一个(有点令人误解的)有多less个套接字被激活的计数。
但是,如果您发现这个端口范围正在使用,正如其他人所提到的那样,您可能会遇到连接未closures的潜在问题。 这可能是一个代码问题。
另外,如果您的Web服务器和数据库服务器在同一台计算机上运行,则可能需要考虑TCP / IP之外的连接协议,例如内存或命名pipe道。
由于jlupolt的post,因为它正是指出了解决我所面临的问题的关键。
一些高曝光率的横幅广告在短时间内(小时)驱动大量stream量到我们的网站,随机(不总是)发生“无法连接到MySQL服务器…”错误。
db服务器的内存使用量和CPU负载在这段时间内还是很低的,mysql服务器的开放连接远远低于max_connections的限制。 所以它不应该是MySQL的问题。
在遵循jlupolt的build议之后,我们发现web服务器(不是数据库服务器,在我们的例子中是另外一台机器)的默认临时端口范围(1024〜5000)全部满了TIME_WAIT状态。 经过进一步的serching,我们发现这个网页:
B.5.2.2.1。 在Windows上连接到MySQL服务器失败http://dev.mysql.com/doc/refman/5.1/en/can-not-connect-to-server.html
在将MaxUserPort提升到20000并将TcpTimedWaitDelay降至20(需要重新启动)之后,连接错误从未发生。 我们使用的MaxUserPort和TcpTimedWaitDelay的值可能不适合您的情况。 这个值取决于tcp / ip连接的数量有多快,这个组合应该允许有足够数量的新连接并释放未用连接的时间。
解:
打开registry编辑器regedit
TcpTimedWaitDelay设置:
findHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parametersregistry子项并创build一个名为TcpTimedWaitDelay的新的REG_DWORD值。
将此值设置为十进制30,hex0×0000001e 。 这个值等待的时间是30秒。
默认值: 0xF0 (16229),等待时间设置为240秒。
MaxUserPort设置(增加最大端口连接):
findHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parametersregistry子项,并创build一个名为MaxUserPort的新REG_DWORD值。
设置为小数点32768的最小值。
默认值:5000(十进制)。
closuresregistry编辑器,然后重新启动Windows系统。
您可能要确保您closures了与数据库的所有连接。 当您调用查询时,您可能会意外地将它们打开,并且随着时间的推移,Windows将达到最大连接数并引发无法连接错误。 当你稍后再试时,windows可能已经释放了一些连接,并且你又一次能够访问数据库。
祝你好运,希望这有助于一些。
最近有几个“本地主机”问题。
看看/ etc / hosts,并确保你有一个没有任何推荐的本地主机的条目(例如: 127.0.0.1 localhost ) – 一些较新的Linux版本(和Windows 7)最近已经停止了这一点。
此外,值得检查,如果你有SQL绑定到回送和实际的IP地址,并尝试访问它。
一些debugging技巧:
你能连接到TCP端口吗? 尝试telnet localhost 3306如果它显示“连接被拒绝”,你有一个networking问题
你的连接是否超过MySQL的最大连接? 尝试增加my.cnf中的variables“max_connections”,然后重新启动MySQL
你打开连接超过8小时吗? MySQL将在8小时后自动closures连接。 你可以对此做很多事情 – 如果是这个问题,试试Googlesearch。
尝试直接连接到127.0.0.1
在某些情况下,尝试连接到“本地主机”将尝试连接通过内部“套接字”连接,而不是通过MySQL的networking接口,使用IP修复了这一点。