Can't connect to MySQL server on 'XXXX' (10055) 问题解决方案 亲测可行


之前公司一台windows系统的服务器,今天突然发现里面的mysql连接不上了,错误提示如下:

Can't connect to MySQL server on'localhost' (10055) 

花了半天时间排查了一下问题,现总结一下排查过程和解决方案,方便日后查阅。

系统平台:Windows Server 2008 R2

数据库:MySql 5.5

网上说这种情况是因为大用户并发访问造成的,查阅资料发现确实是这样的:

http://blog.whitesites.com/How-to-Fix-MySQL-Error-10055__635140180116307813_blog.htm

  • 当有一个连接访问数据库的时候,系统就会动态的为每个连接分配一个端口,Windows Server 2008 R2默认只分配16383个,所以高并发的情况下完全有可能导致端口不够用,导致数据库10055错误的产生。
  • 还有一种情况是端口重用的问题,每一个被系统动态分配的端口在连接关闭后,都需要等待一段时间才可以再次重复使用,这个时间是可以修改的。

那么我们就可以对症下药找到两个解决办法:

改变可用动态端口范围

可以查看一下默认的范围是多少:

netsh int ipv4 show dynamicport tcp

netsh int ipv4 show dynamicport udp

netsh int ipv6 show dynamicport tcp

netsh int ipv6 show dynamicport udp

修改命令为:netsh int set dynamic start=number num=range

例如:

netsh int ipv4 set dynamicport tcp start=10000 num=50000

netsh int ipv4set dynamicport udp start=10000 num=50000

netsh int ipv6set dynamicport tcp start=10000 num=50000

netsh int ipv6set dynamicport udp start=10000 num=50000

可以设置的起始端口是多少,最大可以设置多少个端口?

start的最小值是1025,num指的是范围,最小值是255,最大值是 start + num < 65535,当TCP链接大于5000时,就会报10055错误。

解决方案:

1. 通过注册表配置动态分配端口的最大值:

运行 regedit 打开注册表,依次找到以下路径

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

在右侧空白处,右键新建DWORD值

名称:MaxUserPort

数值数据:65534

基数:十进制

点确定,关闭注册表,再次尝试连接应该就可以了。

2. 修改端口复用时间:

运行 regedit 打开注册表,依次找到以下路径

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

名称:TcpTimedWaitDelay

数值类型:REG_DWORD - 时间(以秒为单位)

有效范围:30-300(十进制)

默认值:0x78(十进制 120)

描述:此参数确定连接在关闭时保持 TIME_WAIT 状态的时长。只要连接处于 TIME_WAIT 状态,便不能重新使用套接字对。

为了复用的快一些:可以设置为最小值:30

官方文档:http://support.microsoft.com/kb/314053

参考文档:https://blog.csdn.net/langren697/article/details/38422055