晚上在那里调程序,把mysql.data组件的nuget包进行了更新,前几天好好的程序,开始抛错,跟踪断点发现以下的异常:

Unable to connect to any of the specified MySQL hosts.
一开始以为数据库出了错误,去检查数据库状态正常,用Mysql workbench在远程连接也正常。感觉有点奇怪。
又认真看了下,发现这个异常下面还有个提示:

INNER EXCEPTION:
Sequence contains more than one matching element

这是个什么鬼,网上搜索了一下,发现这个是mysql.data组件的一个bug
大意是在连接字符串使用了www.xxx.com这样的域名来连接mysql.而mysql组件在解析时发现IP与以前访问的Ip不一致,于是拒绝连接。

解决的办法有几个:

As I see it, you have three options:

  1. Downgrade to 8.0.17.
  2. Use your workaround of performing DNS resolution yourself, then using an IP address in the connection string.
  3. Switch MySQL libraries (to MySqlConnector).

如我所见,您有三个选择:
1)降级至8.0.17。
2)使用您自己执行DNS解析的解决方法,然后在连接字符串中使用IP地址。
3)切换MySQL库(到MySqlConnector)。

我选择把连接字符串更改成IP的形式访问,问题得到了解决。
但是这显然不是一个最终解决的办法。

官方提出:

Posted by developer:

Fixed as of the upcoming MySQL Connector/NET 8.0.20 release, and here’s the proposed changelog entry from the documentation team:

A connection made to a named server with multiple DNS entries pointing to
different IP addresses for the same server generated an exception. Now,
only the first element is returned when multiple elements are found.

Thank you for the bug report.
在即将推出的MySQL Connector / NET 8.0.20版本中已修复,这是文档团队建议的changelog条目:

与指定服务器建立的连接,其中有多个DNS条目指向
同一服务器的不同IP地址生成异常。 现在,
找到多个元素时,仅返回第一个元素。

我在nuget服务器里看了下,8.0.20还没有上线。只有等上线后再解决吧。

文章来源于互联网:处理asp.net core连接mysql的一个异常Sequence contains more than one matching element

发表评论