我在.net core 3.1中有一个应用程序,我正在使用MySql。要连接到MySql,我使用Pomelo.EntityFrameworkCore.MySql nuget。
我的.net核心应用程序作为docker容器部署在AWS ECS上,我使用Aurora MySql RDS存储数据。我已经授予Aurora MySql的"公共访问"权限,我可以使用MySql工作台连接到数据库,也可以使用localhost连接到我的.net核心应用程序。但当我部署应用程序并尝试执行任何数据库操作时,它就会开始抛出异常:
引发了一个异常,可能是由于瞬态失败考虑通过添加"UseMySql"调用的"EnableRetryOnFailure(("。"。
然后我添加了这样的重试模式:
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"
添加重试模式后。我得到这个错误:
"执行数据库时超过了最大重试次数(5(使用"MySqlRetryingExecutionStrategy"执行操作。请参阅内部异常最近的失败。">
所以我怀疑,这是另一回事。我在这里做错了什么?或者可能是aws端出了问题
所以问题与我提取的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
将SslMode=None
添加到连接字符串中,并查看连接是否有效(请参阅MySqlConnector的连接字符串选项(。暂时的异常只是意味着Pomelo(即MySqlConnector(无法连接到数据库服务器。
因此,这与连接问题有关(可以通过更改连接字符串或更改Aurora/防火墙配置来解决(。