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

kdfy810k  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(1416)

我在试着管理 dotnet ef database update 针对我的aws aurora mysql rds集群的cli命令。出于测试目的,我硬编码了连接字符串,以消除配置加载的问题。
当我运行 update 命令我收到以下错误:
使用到服务器“some rds cluster.defg.us-east-2.rds.amazonaws.com”上数据库“”的连接时出错。
mysql.data.mysqlclient.mysqlexception(0x80004005):拒绝用户'bobby'@'555.555.555.555'的访问(使用密码:yes)
在c:\projects\mysqlconnector\src\mysqlconnector\core\serversession.cs中的mysqlconnector.core.serversession.connectasync(connectionsettings cs,iloadpalander loadbalancer,iobehavior,cancellationtoken cancellationtoken):第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工作台连接到集群;这个 update 来自同一台计算机的cli命令失败。连接到rds的安全组允许来自我的ip地址的流量连接(因此mysql workbench连接)。ef core和pomelo.entityframeworkcore.mysql需要做什么才能让cli更新表?aurora是否支持ef core为了更新数据模型而需要做的事情,比如出于某种原因使用不同的端口号?
我注意到错误是“using the connection to database''`并且我无法判断它是否故意将数据库名称留空,或者这是否是问题的一部分。db是在migration和connection字符串中指定的,所以我假设他们不使用db名称,因为在mysql中它不是db而是“schema”。
我正在运行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");
    }
}
mrphzbgm

mrphzbgm1#

我也遇到了同样的问题,这是因为db密码中包含一个“$”字符。
当我这么做的时候 export MY_DB_ENV="Server=localhost;Database=my_db;Uid=root;Pwd=pass_with_$" $已从密码中删除,无法连接。
你可以和我核对一下 echo $MY_DB_ENV 如果是这样的话。

uz75evzq

uz75evzq2#

这似乎是一个连接问题。我能够在一个新项目中连接并运行迁移。看看这个项目https://github.com/pomelofoundation/pomelo.entityframeworkcore.mysql 并阅读test/efcore.mysql.integrationtests中的代码。

相关问题