1

我在 .net core 3.1 中有一个应用程序,我正在使用 MySql。要连接到 MySql,我正在使用 Pomelo.EntityFrameworkCore.MySql nuget。

我的 .net 核心应用程序部署为 AWS ECS 上的 docker 容器,我使用 Aurora MySql RDS 存储数据。我已授予对 Aurora MySql 的“可公开访问”访问权限,我可以使用 MySql 工作台连接到数据库,也可以使用 localhost 连接到我的 .net 核心应用程序。但是当我部署应用程序并尝试执行任何数据库操作时,它开始抛出异常:

引发了一个异常,可能是由于暂时性故障。考虑通过将“EnableRetryOnFailure()”添加到“UseMySql”调用来启用瞬时错误恢复能力。

然后我添加了这样的重试模式:

 services.AddDbContextPool<DataContext>(options =>
      options.UseMySql(Configuration.GetConnectionString("DefaultConnection"), builder =>
      {
          builder.EnableRetryOnFailure(5, TimeSpan.FromSeconds(5), null);
      }
  );

我的连接字符串是这样的:

"DefaultConnection": "Server=db-cluster-1-instance-1.cqb2fsjwx78p.us-east-2.rds.amazonaws.com;Database=dbName;User ID=admin;Password=password;port=3306"

添加重试模式后。我收到此错误:

“使用 'MySqlRetryingExecutionStrategy' 执行数据库操作时超出最大重试次数 (5)。请参阅内部异常以了解最近的失败。”

所以我怀疑,这是另一回事。我在这里做错了什么?或者在aws方面可能有问题

4

2 回答 2

2

所以这个问题与我正在拉的 docker 图像有关。我正在使用mcr.microsoft.com/dotnet/core/sdk:3.1. 将其更改为mcr.microsoft.com/dotnet/core/sdk:3.1-bionic有效。 https://github.com/dotnet/SqlClient/issues/222

于 2020-03-23T12:00:48.200 回答
0

添加SslMode=None到您的连接字符串并查看连接是否有效(请参阅MySqlConnector 的连接字符串选项)。瞬态异常只是意味着 Pomelo(即 MySqlConnector)无法连接到数据库服务器。

所以这与连接问题有关(可以通过更改连接字符串或更改您的 Aurora/防火墙配置来解决)。

于 2020-03-21T00:07:49.263 回答