记录一次失败的服务器问题排查。
1. 问题
环境:windows2012 、mysql 5.6
出现问题:重启MySQL服务,显示启动成功,用第三工具连接时提示:错误码2003 can't connect to mysql server on 'localhost' (10055);
通过cmd命令尝试连接,还是无法连接。
首先确定mysql服务已经启动了,如果未启动就连接的话也会有这样的错误提示。
2.排查并尝试解决
第一反应先百度 can't connect to mysql server on 'localhost' (10055),得到参考,进行以下修改:
- 通过注册表配置动态分配端口的最大值,在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters里加上如下的键值:
ValueName: MaxUserPort (有博主的情况是只修改这一项)
ValueType: DWORD
Valuedata: 65534
- 通过注册表配置连接等待时间,在HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters加上
键值:TcpTimedWaitDelay
数值类型:REG_DWORD - 时间(以秒为单位)
有效范围:30-300(十进制)
默认值:0x78(十进制 120)
由于文章太多,我也记不清到底是参考哪位博主的了,有一位博主介绍了MaxUserPort和TcpTimedWaitDelay,链接地址:https://www.cnblogs.com/tianzhiliang/articles/2400176.html
可能是当时没重启服务器,做完以上修改后重启MySQL服务后问题依旧存在。
3.梳理
关闭其他服务,只启动MySQL数据库的服务,通过命令netstat -ano查看当前已使用的端口,发现只有很少一部分。再次尝试连接数据库,问题依旧存在,此时我有点懵了。
选择修改MaxUserPort和TcpTimedWaitDelay,是觉得没有可用的连接才造成数据库无法连接,可是现在根本就没有占用多少连接,更懵了。
4.重启大法
由于已经有用户再使用该系统,所以只能先解决当前问题,无奈只能采用重启大法,重启后该问题不再复现。
5.总结
平时对服务器的操作就比较少,也是第一次遇见这个情况,虽然这次没找到问题的原因,但是总结一下,如果再此发生这个问题也能有个思路。
- 先看数据库的错误日志,在my.ini文件中(C:ProgramDataMySQLMySQL Server 5.6下),找到log-error="LAPTOP-KP8RB178.err"(C:ProgramDataMySQLMySQL Server 5.6data下)。
- 还得排查端口占用情况,netstat -aon|findstr 3306命令,查看数据库的TCP连接情况,如果很多状态为TIME_WAIT的连接,关闭这些连接后再试试。
- 有位博主的建议是关闭防火墙,由于对服务器防火墙知识了解不多,我当时直接把Windows Firewall服务给关了,很尴尬,无法远程了,这个方案做个备选吧。
- 数据库版本和系统兼容问题,看了这篇文章后才有这个猜测,都是English,有些地方我肯定也没整明白。
还有一些参考链接如下:
- mysql 10055如何解决
- Can't connect to MySQL server on 'XXXX' (10055) 解决方案
- Mysql数据库日志配置
- https://www.cnblogs.com/studywithallofyou/p/13356986.html