MySQL 数据库在大用户量并发的情况下会出现以下错误:

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

错误的背景如下:

  • 系统:Windows Server 2008 R2
  • 数据库:MySql 5.7

错误现象:错误是一阵一阵的出现,一会正常,一会不正常


经过一番挣扎验证,发现将数据库放在普通的Win7 系统上不会出现该错误,所以应该可以排除这种代码层面的原因,也可以排除是MySQL 配置方面的原因。那到底是什么原因呢?经查资料得到下面这篇文章,

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

大家应该都能看懂,大体意思是应用程序频繁的连接访问数据库,而系统会为每个连接动态分配一个端口,Windows Server 2008 R2默认可供动态分配使用的端口只有16383 (49152 - 65535)个,(博主写成了16838,当然这是书写错误,瑕不掩瑜啊)。

这样的话,大并发的情况下就会导致动态端口占用完的情况,这是有人会问我的客户并发量并没有达到16383,为什么还会出现这种情况?

那就涉及到端口重用问题,每个动态分配的端口号在连接关闭后,需要等待一段时间才能重新使用,这个时间是可以改变的,具体做法稍后介绍。分析到这,这个问题应该是可以解决了,具体解决办法有两个:

  • 1.      改变可用动态端口范围

在修改之前我们可以查看一下默认到底是多少:

  • 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 <ipv4|ipv6> set dynamic <tcp|udp>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

到此或许我们就有个疑问,我么可以设置的起始端口是多少,最大可以设置多少个端口,官方说明如下:

The minimum range of ports that can be set is 255.
Theminimum starting port that can be set is 1025.
The maximum end port (based onthe range being configured) cannot exceed 65535。

也就是说 start的最小值是1025,num指的是范围,最小值是255,最大值及start + num < 65535.

官方原文链接地址:

        http://support.microsoft.com/kb/929851/en-us

有时候可能需要配置动态端口最大值:

因为官方如下描述:

  • If youtry to set up TCP connections from ports that are greater than 5000, the localcomputer responds with the following WSAENOBUFS (10055) error message:
  • An operation on a socket could not be performed because thesystem lacked sufficient buffer space or because a queue was full.

就是说当TCP链接大于5000时,就会报10055错误。

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

在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters里加上如下的键值:

  • ValueName: MaxUserPort
  • ValueType: DWORD
  • Valuedata: 65534
  • ValidRange: 5000-65534 (decimal)
  • Default:0x1388 (5000 decimal)

官方原文链接地址:

  • http://support.microsoft.com/kb/196271/en-us

  • 2.      设置端口复用时间:

可以通过修改或添加如下注册表字段来配置:

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

★★★ | MySQL | Can‘t connect to MySQL server on ‘XXXX‘ (10055) 解决方案相关推荐

  1. Can't connect to MySQL server on 'XXXX' (10055) 解决方案

    最近做一个服务器端项目,要用到MySQL 数据库,但在大用户量并发的情况下会出现以下错误: Can't connect to MySQL server on'localhost' (10055) 花了 ...

  2. Mysql Can't connect to MySQL server

    Mysql Can't connect to MySQL server on 'xxxx' (111) 从其它地方远程连接mysql服务器时如此错误 解决办法: # vi /etc/mysql/my. ...

  3. 安装mysql 10055_Can’t connect to MySQL server on ‘localhost’ (10055) | 学步园

    服务器:   windows2000   server   +   iis5.0   +   php   isapi   +   mysql 我用php+mysql开发了一个web站,该站访问量很高. ...

  4. 关于mysql:Can‘t connect to MySQL server on ‘localhost:3306‘ (XX) + 关于navicat:client does not supp...

    bug:Can't connect to MySQL server on 'localhost:3306' (XX)   # XX=1003?/6? 问题描述:mysql的服务无法启动,不给任何解释; ...

  5. MySql - “Can‘t connect to MySQL server on ‘127.0.0.1‘ ([Errno 61] Connection refused)“

    之前用 PyMySql 模组连结本地端的 MySQL 工作的挺顺利的,谁知道在 Mac 重开机后资料库连不上了,报错讯息如下: "Can't connect to MySQL server ...

  6. 客户端远程连接MySQL出现2003-Cant connect to MySQL server on xxx

    在mysql可视化工具远程连接mysql是出现如题错误,一般考虑三种情况. 第一,是否允许远程连接,在linux服务器上进入mysql查看mysql库中的user表 mysql -uroot -p m ...

  7. mysql 10055 解决方案_MySQL提示 Can't connect to MySQL server on'localhost' (10055) 解决方案...

    问题主要出现在Windows环境中,主要原因是应用程序频繁的连接访问数据库,而系统会为每个连接动态分配一个端口,Windows Server 2008 R2默认可供动态分配使用的端口只有16383 ( ...

  8. mysql 出现2003- cant connect to MYSQL server on localhost 的解决办法

    1.说明服务可能关了->开一下服务 计算机->右键->管理 服务和应用程序->点击服务->搜索:m->找到mysql->右键:启动 问题解决

  9. mysql starting server 失败_安装MySQL过程中(最后starting server)报错解决方案

    错误显示: 点击取消,直至安装结束后,去C:\ProgramData\MySQL\MySQL Server 5.6\data下面的.err文件看看,用记事本打开,内容是否类似于: 150318 10: ...

最新文章

  1. freemarker中 感叹号、双感叹号、问号、双问号 的使用方法
  2. 个人猜测一下《黑神话:悟空》的部分剧情
  3. c++11测试时间封装
  4. spark:SparkUI界面
  5. C++11 range-based for loop
  6. 【FFMEPG】windows下编译ffmpeg2.5——使用VS2013,ARMLINUX,ANDORID编译ffmpeg
  7. PIE SDK组件式开发综合运用示例
  8. 送给前端的干货 ,绝对经典的学习资料大全,js框架,css
  9. 基于VTD自带的场景 进行场景搭建
  10. 军棋java_军棋规则及走法
  11. jtopo连线绘制脉冲动画效果
  12. Java Calendar,Date,DateFormat,TimeZone,Locale等时间相关内容的认知和使用(2) 自己封装的Calendar接口
  13. pytorch detach用法
  14. 预言机(Oracle)
  15. 时间序列分析相关概念
  16. handlebars学习总结
  17. Python读取图片中的文字(OCR)
  18. centos6——初始化脚本
  19. 农业银行面试计算机专业类知识,中国农业银行面试经验
  20. MySQL ACID与MVCC浅谈

热门文章

  1. asp mysql语法_ASP编程基本语法
  2. Unity添加程序集引用
  3. python request microsoft graph_从Azure函数内部调用Microsoft Graph API
  4. 如何使用传输另一台计算机中,怎么将文件从一台电脑传输至另一台电脑
  5. 一半的寿司店标错标签 揭秘寿司的真实成本
  6. matlab对文本文件、数据文件等的文件读取、操作等实用功能总结
  7. OI (信息 ) 竞赛中的对拍程序,造数据,对拍利器
  8. Android Seekbar进度条末端显示不全的解决方法
  9. 初次使用fonticon阿里巴巴矢量图标库
  10. C语言打印心图案----真好玩