在实体框架核心数据库更新期间连接到Aurora时出错

时间:2018-07-15 03:02:11

标签: c# mysql entity-framework amazon-web-services amazon-rds-aurora

我正在尝试对我的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");
    }
}

2 个答案:

答案 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中的代码。