解决mysql 10048 错误

来源:互联网 发布:电脑摄像头监视器软件 编辑:程序博客网 时间:2024/06/06 03:18

Error: Can't connect to MySQL server on 'localhost' (10048)
以上错误分几种情况说一下(首先您要确保您的服务器及服务器环境是正常的,装一个新论坛试一下就知道了):

1. 如果您是虚拟空间,出现以上错误,有可能是限制而引起,只有找您买虚拟空间的服务商解决,或是更换更好的空间
  
2. 有可能是攻击,攻击会导致服务器内存被占完,然后MYSQL数据库没内存用了,MYSQL就挂了,就会出现以上错误。

3. 有可能是程序出错,或是某个数据表出错,直接把整台服务器的MYSQL拉死了,然后出现上面错误。

4. 也有可能是服务器中安装的防火墙引起的。

如果您认为是网站论坛访问量过大,数据库连接超过最大连接数,MYSQL数据库服务停止了。你用fport工具查下看看,如果有十几个连接来自同一个IP,而且都是time-wait   ,那肯定就是这个原因了。
注意:如果是真正的超过了MYSQL连接数限制,出错的提示信息会很清楚的告诉您是超限了,并会显示限制为多少.真正的MYSQL连接数超限错误提示信息不是上面这个错误提示。
  
解决方法(针对WIN系统)
1, 首先到系统服务里面找到MYSQL服务并启动MYSQL服务.
2, 到MYSQL安装目录找到MY.INI文件(linux下为 my.cnf),打开MY.INI查找max_connections,修改连接数为1000,查找wait_timeout,修改为wait_timeout = 5,最后重启IIS与MYSQL服务.

解决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系统。

不修改配置信息的解决方法

昨天写了个PHP的转换程序,一共8万数据.转换过程中,由于程序循环过程中,频繁地mysql_connect又mysql_close
导致以下错误

mysql_connect() [function.mysql-connect]: Can't connect to MySQL server on 'localhost' (10048)

还以为环境坏了,换了好几个版本的PHP和MYSQL,都还是不行.昨晚查了一整晚的资料也没有解决.

今天不死心,继续改程序,还是被我搞定了,写在BLOG里备忘一下.

解决办法:

使用mysql_pconnect 持久连接
循环过程中不需要再mysql_connect又mysql_close 仅在程序结尾关闭即可.然后记录集分页跳转.

出错的原因就是因为太频繁的连接,就像CC攻击一样.MYSQL就死了.

0 0