【问题标题】:Pomelo MySQL (.NET Core) Can't Recover After Database FailurePomelo MySQL (.NET Core) 在数据库故障后无法恢复
【发布时间】:2018-06-01 05:42:43
【问题描述】:

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

是否需要重新创建某些内容(可能是 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 中创建数据库上下文的方式:

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

任何帮助将不胜感激。

贾瓦

【问题讨论】:

    标签: mysql amazon-web-services asp.net-core amazon-rds amazon-ebs


    【解决方案1】:

    好的,我们弄清楚发生了什么。 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 服务器重新上线,我们的服务也正常运行。

    贾瓦

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-26
      • 2019-08-21
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 2016-09-23
      • 2021-12-02
      • 1970-01-01
      相关资源
      最近更新 更多