问题验证
我们如今具体分析,为何客户端发送账号,驱动版本,操作体系信息到数据库端这么慢。这部分的代码在Connector/NET的MySQLAuthenticationPlugin.cs文件中。 我们修改┞封部分代码,进行时光埋点,来进一步定位问题。下面是根据时光埋点,打印出来的跟踪信息。
CTO练习营 | 12月3-5日,深圳,是时刻成为优良的技巧治理者了
问题描述
在应用端,有时看到有如下报错:Authentication to host 'xxxx' for user 'yyyy' using method 'mysql_native_password' failed with message: Reading from the stream has failed.
表示特点:
- 只有效Connector/NET 出现这个问题, 用JDBC驱动没有类似问题。
- 多台应用办事器,只有一台报这个错。是以可以清除办事器端的问题。
- 问题异常随机。重启一下办事器/IIS,就能临时解决问题。
- 有一些场景应用办事器CPU并不是很高,也会有时抛出这个错来。
客户端是Windows机械, 驱动是MySQL Connector ADO.NET Driver for MySQL (Connector/NET) ,应用的版本是6.9.9是比较新的版本。
问题分析
我们在应用办事器端和数据库端抓包。两边抓到的包是一致的。可以清除收集包损掉问题。下面是抓到的包,以及时光点:
大年夜上述收集包的交互来看, 前面庞个包是TCP的三次握手协定。问题出在第六个包,数据库办事器向应用办事器发送了一个Finish包,来终止数据库的连接。数据库发送Finish包,是因为数据库端发明连接超时而发送的。 这是由办事器端的Connect_timeout这个变量来控制。原因在于应用端跨越10秒未向数据库办事器端发送收集包。大年夜收集包交互的情况来看,第五个包和第六个包的时光距离刚好是10秒。
比较正常的数据库连接和膳绫擎异常的数据库连接。 应用办事器发送第5个包到数据库端后, 应当紧接着发送下面的收集包到数据库端的。这个包主如果发送账号,驱动版本,操作体系信息比及数据库办事器端。【下面是部分的┞俘常的收集包截图】。在出现异常报错的场景,客户端是延迟发送这个包的。在Frame 8才发送的。而此时连接已经被Finish了,在Frame 9,数据库端发送了一个Reset包到应用办事器,彻底中断连接。
大年夜跟踪的Trace来看,有30秒阁下的操作延时,全部时光集中在获取Mysqldefs:: OSDetails的属性。这部分代码如下:
这段代码是经由过程WMI萌芽,来获得Caption信息。也就是操作体系的版本信息。因为是WMI调用,所以依附的关系比较多且与操作体系的状况相干。
为了验证是否为WMI偶发且频繁的延时导致临盆情况的某些机械出现通信异常,我们把这段代码抽出来。下面是一段简短的重现代码:
在有问题的应用办事器上,我们运行上述代码,确切可以发明WMI萌芽有超时。下面这些日记信息是我们抓到的萌芽跨越30秒的WMI信息萌芽操作。由此完全确认是该操作导致MySQL authentication failed缺点。
- 2017-11-21 17:19:30.208, 33638
- 2017-11-21 17:20:09.193, 33199
- 2017-11-21 17:20:53.086, 33201
- 2017-11-21 17:27:05.114, 32976
- 2017-11-21 17:28:19.178, 33635
- 2017-11-21 17:30:07.130, 65977
- 2017-11-21 17:30:49.051, 40478
- 2017-11-21 17:31:15.126, 26072
- 2017-11-21 17:38:16.048, 66671
- 2017-11-21 17:38:49.204, 33152
- 2017-11-21 17:39:53.161, 33828
推荐阅读
VMware与AWS携手扩展VMware Cloud on AWS的功能性与可用性
CTO练习营 | 12月3-5日,深圳,是时刻成为优良的技巧治理者了 【51CTO.com原创稿件】在本次AWS re: Invent 2017大年夜会上,VMware与AWS两边合营颁布VMware Cloud™ border="0" alt>>>详细阅读
本文标题:MySQL Authentication Failed的问题分析与解决对策
地址:http://www.17bianji.com/lsqh/39417.html
1/2 1