无法连接其他服务器上的mysql

x759pob2  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(363)

我创造了一个 DotNet 在数据库中插入一些数据的应用程序,为了管理这种情况并处理不同的数据库配置,我创建了一个名为 cred.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; }
}

当代码到达 MySqlConnection.Open(); 在windows上,它可以工作,但是当我在linux上尝试应用程序时,将端口改为 80 我得到:
连接必须有效且打开
但是凭证是正确的,我如何诊断问题?

e5nszbig

e5nszbig1#

mysql的默认端口是3306,我怀疑您的mysql服务器是否在linux上的端口80上运行。很可能您是在linux环境(也使用apache或nginx)上的该端口上访问您的webapp,或者是在使用其RESTAPI时。
如果在本地环境中一切正常,但在远程(linux)服务器上使用时却无法运行,则可能是您试图从远程服务器访问同一数据库,但在配置中使用了localhost,或者碰巧使用了正确的ip/连接字符串,但存在一些权限问题。另一个常见的错误是禁用了对mysql数据库服务器的远程访问(或者对于给定的用户),因此可能需要设置ssh访问,或者编辑mysql serlvler的配置设置。

yws3nbqq

yws3nbqq2#

我猜您的mysql守护程序不是以root身份运行的,只有root用户可以绑定1024以下的端口。但可能还有10件事。我的建议是,在默认端口上运行mysql。

相关问题