昨天晚上,aws rds出现了一个“互联网连接问题”,不久后得到了解决。但是,我的应用程序(在.net core中运行,并通过pomelo.entityframeworkcore.mysql连接到rds mysql示例)永远无法重新建立到数据库的连接,即使mysql服务器重新联机。我测试了从我自己的本地机器连接,它工作得很好。然后我重新部署了.net核心应用程序,一切都重新开始工作。
是否有需要重新创建的内容(可能是db上下文),或者是否有缓存中的内容需要刷新才能再次连接?我通过主机名连接,连接字符串如下所示:
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)
下面是如何在startup.cs中创建db上下文:
services.AddDbContext<BlayFapContext>(opt => opt.UseMySql(Settings.Instance.SQLConnectionString));
任何帮助都将不胜感激。
贾瓦
1条答案
按热度按时间5q4ezhmt1#
好吧,我们知道发生了什么。pomero的mysql Package 器有一个问题,正如他们在git repo中所描述的:https://github.com/pomelofoundation/pomelo.entityframeworkcore.mysql/issues/434
基本上,如果在第一次使用连接字符串时mysql数据库不可用,那么它将被缓存为无效,并且将不再工作。您可以很容易地确认这一点,方法是启动一个没有mysql连接的服务,验证它不工作,然后启动mysql并确认该服务仍然不工作。在发现第一个连接字符串无效后,它永远无法建立mysql连接。
他们在2.0.1版本发布后不久就对其进行了修补,但从那时起他们就没有用新版本更新nuget,尽管6个月前发现了这个问题。因此,解决方法是 checkout 他们的存储库源代码,然后自己修补它。我们发现这里的修复很好:https://github.com/pomelofoundation/pomelo.entityframeworkcore.mysql/pull/456
那么,为什么要重试连接字符串?我们已经成功连接了!原来,俄亥俄州数据中心的互联网连接问题不仅限于rds,还影响了ec2。我们的ec2示例作为修复的一部分被重新启动,mysql连接在重新启动时由于持续的连接问题而无效。连接的状态是缓存的,即使mysql服务器重新联机,我们的服务也是toast。
贾瓦