gpt4 book ai didi

mysql - Pomelo MySQL (.NET Core) 数据库故障后无法恢复

转载 作者:行者123 更新时间:2023-11-29 02:41:40 24 4
gpt4 key购买 nike

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

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

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 中创建数据库上下文的方式:

services.AddDbContext<BlayFapContext>(opt => opt.UseMySql(Settings.Instance.SQLConnectionString));

如有任何帮助,我们将不胜感激。

吉瓦

最佳答案

好的,我们弄清楚发生了什么。 Pomelo 的 MySQL 包装器有一个问题,如他们的 git repo 中所述:https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/434

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

他们在 2.0.1 发布后不久就对其进行了修补,但从那时起他们就没有用新版本更新 Nuget,尽管这个问题是在 6 个月前发现的。因此,解决方法是检查他们的存储库源代码,然后自己对其进行修补。我们发现此处的修复工作正常:https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/pull/456

那么,为什么要重试连接字符串?我们已经成功连接了!事实证明,俄亥俄州数据中心的互联网连接问题不仅限于 RDS,还影响了 EC2。作为修复的一部分,我们的 EC2 实例重新启动,并且由于持续的连接问题,MySQL 连接在重新启动时无效。该连接的状态已缓存,即使 MySQL 服务器恢复在线,我们的服务也正常运行。

吉瓦

关于mysql - Pomelo MySQL (.NET Core) 数据库故障后无法恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50631830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com