我正在尝试对我的AWS Aurora MySql RDS集群运行dotnet ef database update
CLI命令。仅出于测试目的,我对连接字符串进行了硬编码,以消除配置加载的问题。
当我运行update
命令时,出现以下错误:
使用服务器'some-rds-cluster.abcdefg.us-east-2.rds.amazonaws.com'上的数据库''连接时发生错误。
MySql.Data.MySqlClient.MySqlException(0x80004005):用户'bobby'@'555.555.555.555'的访问被拒绝(使用密码:是)
位于MySqlConnector.Core.ServerSession.ConnectAsync(ConnectionSettings CS,ILoadBalancer loadBalancer,IOBehavior ioBehavior,CancellationToken cancelleToken)在C:\ projects \ mysqlconnector \ src \ MySqlConnector \ Core \ ServerSession.cs:line 333
我的ConfigureServices
方法如下:
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
services.AddDbContextPool<AccountContext>(options =>
{
options.UseMySql("server=a-random-cluster.foobar.us-east-2.rds.amazonaws.com;database=SomeDbHere;user=abcdefg;password=abcdefg", contextOptionsBuilder =>
{
contextOptionsBuilder.ServerVersion(new Version(5, 7, 12), ServerType.MySql);
});
});
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
我能够使用本地计算机上的MySql Workbench连接到群集;来自同一台计算机的update
CLI命令失败。附加到RDS的安全组允许来自我的IP地址的通信连接(因此连接MySql Workbench的原因)。为了使CLI更新表,我需要执行EF Core和Pomelo.EntityFrameworkCore.MySql的特定操作吗? Aurora是否支持EF Core需要执行的操作以更新数据模型,例如出于某种原因使用其他端口号?
我注意到错误消息“使用与数据库的连接”,我无法分辨它是否故意将数据库名称留空,或者这是否是问题的一部分。在迁移和连接字符串中指定了数据库但是,所以我认为他们将数据库名称省略了,因为在MySql中它不是Db,而是“模式”。
我正在运行aspnetcore 2.1.0和EF core 2.1.0
我从下面的实体和上下文生成了迁移。
public partial class InitialMigration : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.EnsureSchema(
name: "SomeDbHere");
migrationBuilder.CreateTable(
name: "Users",
schema: "SomeDbHere",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation(
"MySql:ValueGenerationStrategy",
MySqlValueGenerationStrategy.IdentityColumn),
Username = table.Column<string>(nullable: true),
CognitoId = table.Column<string>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Users", x => x.Id);
});
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Users",
schema: "SomeDbHere");
}
}
答案 0 :(得分:0)
我遇到了同样的问题,这是因为数据库密码中包含一个'$'字符。
因此,当我执行FROM openjdk:11.0.5-jdk as openjdk
FROM jboss/keycloak:7.0.1
COPY --from=openjdk /usr/local/openjdk-11/conf/security/java.security /etc/alternatives/jre/conf/security/
时, $ abc 被从密码中删除,无法连接。
您可以使用export MY_DB_ENV="Server=localhost;Database=my_db;Uid=root;Pwd=pass_with_$abc"
进行检查。
答案 1 :(得分:-1)
似乎是连接问题。我能够在一个新项目中连接并运行迁移。看一下这个项目https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql并阅读test / EFCore.MySql.IntegrationTests中的代码。