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
例如:
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