c# - 无法连接另一台服务器上的Mysql

标签 c# mysql linux .net-core

我创建了一个 DotNet 应用程序,它在数据库中插入一些数据,为了管理这种情况并处理不同的数据库配置,我创建了一个名为 cred.json 的 json其中包含有关服务器连接的所有信息。结构是这样的:

{
  "Server":"localhost",
  "Database":"mydb",
  "User":"root",
  "Password":"root",
  "SslMode":false,
  "CharacterSet":"utf8",
  "Port":"3307"
}

连接类包含一个名为 Connect 的方法,该方法读取 cred.json 中可用的配置:

var json = JsonConvert.DeserializeObject<Cred>(File.ReadAllText("cred.json"));

MySqlConnectionStringBuilder conn = new MySqlConnectionStringBuilder();
 conn.Server = json.Server;
 conn.Database = json.Database;
 conn.UserID = json.User;
 conn.Password = json.Password;
 conn.SslMode = GetSslMode(json.SslMode);
 conn.CharacterSet = json.CharacterSet;
 conn.Port = json.Port;

MySqlConnection = new MySqlConnection(conn.ToString());
MySqlConnection.Open();

我还有一个名为 GetSslMode 的方法,它返回特定的 SslMode:

private MySqlSslMode GetSslMode(string sslMode)
{
    switch (sslMode)
    {
        case "Required":
            return MySqlSslMode.Required;
        case "VerifyCA":
            return MySqlSslMode.VerifyCA;
        case "VerifyFull":
            return MySqlSslMode.VerifyFull;
        default:
            return MySqlSslMode.None;
    }
}

模型 Cred 是一个包含 json 结构的简单类:

class Cred
{
    public string Server { get; set; }
    public string Database { get; set; }
    public string User { get; set; }
    public string Password { get; set; }
    public string SslMode { get; set; }
    public string CharacterSet { get; set; }
    public uint Port { get; set; }
}

当代码到达 Windows 上的 MySqlConnection.Open(); 时,它可以工作,但是当我在 Linux 上尝试将端口更改为 80 时,我得到:

connection must be valid and open

但是凭据是正确的,我该如何诊断问题?

最佳答案

mysql 的默认端口是 3306,我怀疑您的 mysql 服务器是否在 Linux 的 80 端口上运行。您很可能在 Linux 环境(也使用 apache 或 nginx)的那个端口上访问您的 webapp,或者当您使用它的 REST api 时。

如果在您的本地环境中一切正常,但在远程 (Linux) 服务器上使用它时无法运行,则可能是您尝试从远程服务器访问相同的数据库,但您在配置中使用了 localhost 或您碰巧使用了正确的 ip/连接字符串,但存在一些权限问题。 另一个常见错误是禁用了对 mysql 数据库服务器(或给定用户)的远程访问,因此可能需要设置,即 ssh 访问,或编辑 mysql serlvler 的配置设置。

关于c# - 无法连接另一台服务器上的Mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50316836/

相关文章:

c# - 将 MvcHtmlString 与 jQuery 模板一起使用 - 正确的 razor 语法是什么?

c# - 为什么局部函数生成的 IL 不同于匿名方法和 Lambda 表达式?

c# - 无效操作异常 : ObjectDataSource could not find a non-generic method that has parameters:

mysql - 在 join | 中显示空值销售值(value) - 类别

Mysql 查询使用 sum 和 group by 选项运行速度非常慢

php - 使用 MySQL LIKE 在数据库中选择转义字符串

linux - 打印 STDOUT/STDERR 并将它们写入 Bash 中的文件?

c# - 在 QnA azure 机器人中嵌入链接

linux - 为什么 qx(ssh ...) 没有输出?

linux - 编写 bash 脚本来更改文本并写入日志