解决 2003 Can’t connect to MySQL server on ‘localhost’ (10048)

2003 
Can’t connect to MySQL server on ‘localhost’ (10048)
一般见于使用mysql的windows 2003服务器.
错误的出现的原因:

第一种原因:
应用程序需要快速释放和创建新连接, 但是由于 TIME_WAIT 中存在的连接超过默认值,导致较低吞吐量.
解决方案:
和本错误密切相关的两个windows的注册表项:TcpTimedWaitDelay和MaxUserPort的值.
TcpTimedWaitDelay 确
定 TCP/IP 可释放已关闭连接并重用其资源前, 必须经过的时间. 关闭和释放之间的此时间间隔通称 TIME_WAIT 状态或两倍最大段生命周
期(2MSL)状态. 此时间期间, 重新打开到客户机和服务器的连接的成本少于建立新连接. 减少此条目的值允许 TCP/IP 更快地释放已关闭的连
接, 为新连接提供更多资源.
MaxUserPort 确定从系统请求任何可用用户端口时所用最大端口数,TCP/IP 可指定的最高端口
号. 如果建立 TCP 连接最大端口连接大于 5000, 本地计算机响应以下错误信息WSAENOBUFS (10055): 因为系统缺乏足够缓冲
区或者因为队列已满而无法执行套接字上操作, 从而导致应用程序的10048错误.
打开注册表编辑器regedit
TcpTimedWaitDelay 设置:找到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters 注册表子键并创建名为TcpTimedWaitDelay 的新 REG_DWORD 值设置此值为十进制 30, 十六进制为 0×0000001e该值等待时间将是 30 秒。本项的默认值:0xF0(16进制), 等待时间设置为 240 秒
MaxUserPort 设置(增加最大值端口连接):找到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters 注册表子键并创建名为 MaxUserPort 的新 REG_DWORD 值设置此值为十进制最低 32768该值等待时间将是 30 秒。重启windows系统。本项的默认值:5000(十进制)
关闭注册表编辑器, 重启windows系统。
(HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpTimedWaitDelay
如果注册表中没有TcpTimedWaitDelay这个项目,请增加这个项目,并设置为双字节(DWORD)类型数值设置为30 ~ 60 之间即可)

另外一个原因是
关于Can’t connect to MySQL server on ‘localhost’ (10048)
这个bug出现在一个LOOP里面,每跑一次,会连接一次MySQL database.
在我自己的Windowx XP 没有出现,不过在 windows 2003 server, x32. 会出现。
因为win32po每次 release rtand close p ort 会有延迟。才导致这个bug.
可以看下面的 forum discussion:
http://bugs.mysql.com/bug.php?id=6580
还有microsoft对这个bug的solution…很麻烦的。。。
http://support.microsoft.com/kb/q196271/
怎么解决呢?
只要去掉 mysql_close()就可以了. 只在 program 的最后放一个 mysql_close() 就可以解决这个问题了。

上一篇:python 利用selectors实现异步I/O


下一篇:关于mysql连接时候出现"error 2003: can't connect to mysql server on 'localhost'(10061)问题的解决