广告
返回顶部
首页 > 资讯 > 数据库 >MySQL连接抛出Authentication Failed错误的示例分析
  • 933
分享到

MySQL连接抛出Authentication Failed错误的示例分析

2024-04-02 19:04:59 933人浏览 独家记忆
摘要

这篇文章主要为大家展示了“Mysql连接抛出Authentication Failed错误的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql连接

这篇文章主要为大家展示了“Mysql连接抛出Authentication Failed错误的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql连接抛出Authentication Failed错误的示例分析”这篇文章吧。

【问题描述】

在应用端,偶尔看到有如下报错:

Authentication to host 'xxxx' for user 'yyyy' using method 'mysql_native_passWord' failed with message: Reading from the stream has failed.

表现特征:

    1.只有用Connector/NET 出现这个问题, 用JDBC驱动没有类似问题。

    2.多台应用服务器,只有一台报这个错,因此可以排除服务器端的问题。

    3.问题非常随机,重启一下服务器/IIS,就能临时解决问题。

    4.有一些场景应用服务器CPU并不是很高,也会偶尔抛出这个错来。

客户端是windows机器, 驱动是MySQL Connector ADO.net Driver for MySQL (Connector/NET) ,使用的版本是6.9.9,是比较新的版本。

下面话不多说了,来一起看看详细的分析与解决思路吧

【问题分析】

我们在应用服务器端和数据库端抓包。两边抓到的包是一致的。可以排除网络问题。下面是抓到的包,以及时间点:

编号绝对时间相对时间(秒)源头目的网络包内容
  1    12:58:47    9.07    应用服务器    数据库服务器    ......S.  
  2    12:58:47    9.07    数据库服务器    应用服务器     …A..S.   
  3    12:58:47    9:07    应用服务器    数据库服务器    …A….   
  4    12:58:47    9:07    数据库服务器    应用服务器     …AP…   
  5    12:58:47    9.27    应用服务器    数据库服务器    …A….   
  6    12:58:57    19.12    数据库服务器    应用服务器     …A…F   
  7    12:58:57    19.12    应用服务器    数据库服务器    …A….   
  8    12:59:10    32.00    应用服务器    数据库服务器    …AP…   
  9    12:59:10    32.00    数据库服务器    应用服务器     …..R..   

从上述网络包的交互来看, 前面三个包是tcp的三次握手协议。问题出在第六个包,数据库服务器向应用服务器发送了一个Finish包,来终止数据库的连接。数据库发送Finish包,是由于数据库端发现连接超时而发送的。 这是由服务器端的Connect_timeout这个变量来控制。原因在于应用端超过10秒未向数据库服务器端发送网络包。从网络包交互的情况来看,第五个包和第六个包的时间间隔刚好是10秒。

MySQL连接抛出Authentication Failed错误的示例分析

对比正常的数据库连接和上面异常的数据库连接。 应用服务器发送第5个包到数据库端后, 应该紧接着发送下面的网络包到数据库端的。这个包主要是发送账号,驱动版本,操作系统信息等到数据库服务器端。【下面是部分的正常的网络包截图】。在出现异常报错的场景,客户端是延迟发送这个包的。在Frame 8才发送的。而此时连接已经被Finish了,在Frame 9,数据库端发送了一个Reset包到应用服务器,彻底中断连接。

MySQL连接抛出Authentication Failed错误的示例分析

我们现在具体分析,为何客户端发送账号,驱动版本,操作系统信息到数据库端这么慢。这部分的代码在Connector/NET MySQLAuthenticationPlugin.cs文件中。 我们修改这部分代码,进行时间埋点,来进一步定位问题。下面是根据时间埋点,打印出来的跟踪信息。

MySQL连接抛出Authentication Failed错误的示例分析

从跟踪的Trace来看,有30秒左右的操作延时。返回MySQLDefs::OSDetails的时候。这部分代码如下:

[DisplayName("_os_details")]

public string OSDetails

{

get

{

string os = string.Empty;

try

{

var searcher = new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");

var collection = searcher.Get();

foreach (var mgtObj in collection)

{

os = mgtObj.GetPropertyValue("Caption").ToString();

break;

}

}

catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); }

return os;

}

}

这段代码是通过WMI查询,来获得Caption信息。也就是操作系统的版本信息。由于是WMI调用,所以依赖的关系比较多。

【问题验证】

我们把这段代码抽出来。下面是一段简短的Repro代码:

static void Main(string[] args)

{

Stopwatch watch = new Stopwatch();

while (true)

{

watch.Restart();

var searcher = new System.Management.ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem");

var collection = searcher.Get();

foreach (var mgtObj in collection)

{

string os = mgtObj.GetPropertyValue("Caption").ToString();

}

watch.Stop();

Console.WriteLine(watch.ElapsedMilliseconds);

if (watch.ElapsedMilliseconds >= 1000)

{

Console.WriteLine("-------------");

File.AppendAllText("abc.txt", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") +","+ watch.ElapsedMilliseconds + "\r\n");

}

}

}

在有问题的应用服务器上,我们运行上述代码,确实可以发现WMI查询有超时:下面这些点是我们抓到的超过30秒的点:

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

2017-11-21 17:40:38.121, 33549

2017-11-21 17:47:09.179, 33775

2017-11-21 17:47:57.174, 33164

【解决思路】

WMI查询慢,可能是由于多种原因所致。如操作系统CPU高,或者查询本身有死。这个问题有待于进一步分析。但看代码,我们知道做这个WMI查询,只是为了获得操作系统的信息。这个信息完全可以缓存起来。而不必要每次连接的时候,去进行WMI查询。

此处确定该错误的根本原因在于MySQL的C# connector中对操作系统信息的获取时间过久,导致触发服务器的连接超时。注释掉该部分(可能导致长时间的操作),进行进一步的验证,再无任何的超时错误出现。

public string OSDetails
{
get
{
dbglog.dolog("MysqlDefs::OSDetails1");
string os = string.Empty;

dbglog.dolog("MysqlDefs::OSDetails2");
return os;
}
}

以上是“MySQL连接抛出Authentication Failed错误的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL连接抛出Authentication Failed错误的示例分析

本文链接: https://www.lsjlt.com/news/57154.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL连接抛出Authentication Failed错误的示例分析
    这篇文章主要为大家展示了“MySQL连接抛出Authentication Failed错误的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL连接...
    99+
    2022-10-18
  • Redis中连接错误的示例分析
    这篇文章主要介绍Redis中连接错误的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言最近由于流量增大,redis 出现了一连串错误,比如:LOADING Redis is...
    99+
    2022-10-18
  • MySQL出现R1-004错误的示例分析
    这篇文章主要介绍MySQL出现R1-004错误的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!用root用户安装MySQL后,会自动创建一个名为mysql的组和一个名为mys...
    99+
    2022-10-18
  • mysql连接慢的示例分析
    小编给大家分享一下mysql连接慢的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一个同事今天反应公司的mysql机器反...
    99+
    2022-10-18
  • 连接MySQL数据库出现错误:2059 - authentication plugin ‘caching_sha2_password‘的解决方法
    原因分析:错误原因:MySQL新版本(8以上版本)的用户登录账户加密方式是【caching_sha2_password】,Navicat不支持这种用户登录账户加密方式。 首先我们需要打开MySQL 命...
    99+
    2023-09-07
    测试工具 mysql
  • MySql连接查询的示例分析
    这篇文章主要介绍了MySql连接查询的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。MySql连接查询精解 出于对知识的总...
    99+
    2022-10-19
  • websphere与mysql连接的示例分析
    这篇文章给大家分享的是有关websphere与mysql连接的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 我是jb9+websphere...
    99+
    2022-10-18
  • MySQL中多表连接的示例分析
    这篇文章主要介绍MySQL中多表连接的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!连接可用于查询,更新,建立事实外键(指人为建立的两张表的对应关系,相对的,FORGIEN ...
    99+
    2022-10-18
  • Mysql自连接查询的示例分析
    这篇文章将为大家详细讲解有关Mysql自连接查询的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。自连接查询假想以下场景:某一电商网站想要对站内产品做层级分类,一个...
    99+
    2022-10-18
  • mysql主从跳过错误的示例分析
    小编给大家分享一下mysql主从跳过错误的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!非gtid:stop slave...
    99+
    2022-10-18
  • MySQL 5.6 GTID常见错误的示例分析
    这篇文章给大家分享的是有关MySQL 5.6 GTID常见错误的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在测试环境搭建完基于GTID的双主环境后,启动数据库报错:[...
    99+
    2022-10-18
  • Express连接MySQL及数据库连接池的示例分析
    这篇文章主要介绍Express连接MySQL及数据库连接池的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Express连接MySQL准备工作打开webstorm新建项目选择express创建一个expres...
    99+
    2023-06-29
  • java连接mysql底层封装的示例分析
    小编给大家分享一下java连接mysql底层封装的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!连接数据库package...
    99+
    2022-10-18
  • golang中mysql数据库连接池的示例分析
    这篇文章主要介绍golang中mysql数据库连接池的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!golang的优点golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标...
    99+
    2023-06-15
  • mysql无法连接出现错误提示10061的解决方法
    这篇文章主要介绍mysql无法连接出现错误提示10061的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!mysql无法连接出现错误提示10061的解决办法:首先删除【my.i...
    99+
    2022-10-18
  • mysql中slave_exec_mode参数处理同步错误的示例分析
    这篇文章主要介绍mysql中slave_exec_mode参数处理同步错误的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! MySQL主从同步中,...
    99+
    2022-10-18
  • mysql中三张表连接建立视图的示例分析
    这篇文章主要为大家展示了“mysql中三张表连接建立视图的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中三张表连接建立视图的示例分析”这篇文...
    99+
    2022-10-18
  • javascript连接mysql与php通过odbc连接任意数据库的示例分析
    这篇文章主要介绍了javascript连接mysql与php通过odbc连接任意数据库的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下...
    99+
    2022-10-19
  • 基于spring-security出现401 403错误自定义处理的示例分析
    这篇文章将为大家详细讲解有关基于spring-security出现401 403错误自定义处理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。spring-security 401 403错误自定...
    99+
    2023-06-20
  • 用innobackupex对于全量备份恢复mysql出错的示例分析
    这篇文章给大家分享的是有关用innobackupex对于全量备份恢复mysql出错的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 一、问题描...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作