柚子MySQL(.NET-Core)可以';数据库故障后无法恢复

柚子MySQL(.NET-Core)可以';数据库故障后无法恢复,mysql,amazon-web-services,asp.net-core,amazon-rds,amazon-ebs,Mysql,Amazon Web Services,Asp.net Core,Amazon Rds,Amazon Ebs,昨晚AWS RDS出现了一个“互联网连接问题”,该问题在不久后得到了解决。但是,我的应用程序(运行在.NET Core中,通过Pomelo.EntityFrameworkCore.MySQL连接到RDS MySQL实例)永远无法重新建立到数据库的连接,即使MySQL服务器重新联机。我测试了从我自己的本地机器连接,它工作得很好。然后我重新部署了.NET核心应用程序,一切都重新开始工作 是否有需要重新创建的内容(可能是数据库上下文),或者是否有缓存中的内容需要刷新以尝试再次连接?我通过主机名连接,连

昨晚AWS RDS出现了一个“互联网连接问题”,该问题在不久后得到了解决。但是,我的应用程序(运行在.NET Core中,通过Pomelo.EntityFrameworkCore.MySQL连接到RDS MySQL实例)永远无法重新建立到数据库的连接,即使MySQL服务器重新联机。我测试了从我自己的本地机器连接,它工作得很好。然后我重新部署了.NET核心应用程序,一切都重新开始工作

是否有需要重新创建的内容(可能是数据库上下文),或者是否有缓存中的内容需要刷新以尝试再次连接?我通过主机名连接,连接字符串如下所示:

server=something.somewhere.us-east-2.rds.amazonaws.com;userid=XXXX;password=YYYYY;database=ZZZZ
下面是引发的异常:

MySqlException: Unable to connect to any of the specified MySQL hosts.
at MySqlConnector.Core.ServerSession+<ConnectAsync>d__56.MoveNext (C:\projects\mysqlconnector\src\MySqlConnector\Core\ServerSession.cs:239)
MySqlException:无法连接到任何指定的MySQL主机。
在MySqlConnector.Core.ServerSession+d__56.MoveNext(C:\projects\MySqlConnector\src\MySqlConnector\Core\ServerSession.cs:239)
下面是我在Startup.cs中创建db上下文的方法:

services.AddDbContext<BlayFapContext>(opt => opt.UseMySql(Settings.Instance.SQLConnectionString));
services.AddDbContext(opt=>opt.UseMySql(Settings.Instance.SQLConnectionString));
任何帮助都将不胜感激


Giawa

好的,我们知道发生了什么。Pomelo的MySQL包装器有一个问题,如git repo中所述:

基本上,如果在第一次使用连接字符串时MySQL数据库不可用,那么它将被缓存为无效数据库,并且不再工作。您可以通过启动一个没有MySQL连接的服务来确认这一点,验证它是否工作,然后启动MySQL并确认该服务仍然不工作。在发现第一个连接字符串无效后,它永远无法建立MySQL连接

他们在2.0.1版本发布后不久就对其进行了修补,但自那时起,他们就没有用新版本更新Nuget,尽管6个月前发现了这个问题。因此,解决办法是签出他们的存储库源代码,然后自己修补它。我们发现这里的修复效果很好:

那么,为什么要重试连接字符串?我们已经有了一个成功的连接!事实证明,俄亥俄州数据中心的互联网连接问题不仅限于RDS,还影响了EC2。我们的EC2实例是作为修复程序的一部分重新启动的,MySQL连接在重新启动时由于持续的连接问题而无效。该连接的状态被缓存,即使MySQL服务器重新联机,我们的服务仍然是toast

贾瓦