Невозможно подключить Mysql на другом сервере

0

Я создал приложение DotNet, которое вставляет некоторые данные в базу данных, для управления этой ситуацией и обработки различной конфигурации базы данных. Я создал json под названием 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 я получаю:

соединение должно быть действительным и открытым

но учетные данные верны, как я могу диагностировать проблему?

Теги:
.net-core

2 ответа

0
Лучший ответ

Порт по умолчанию для mysql - 3306, и я сомневаюсь, что ваш сервер mysql работает на порту 80 в Linux. Вероятно, вы получаете доступ к вашему webapp на этом порту в среде Linux (например, apache или nginx) или когда вы используете его REST api.

Если все работает в вашей локальной среде, но не запускается, когда вы используете его на удаленном (Linux) сервере, возможно, вы пытаетесь получить доступ к той же базе данных с удаленного сервера, но вы либо используете localhost в своей конфигурации, либо вы используйте правильную строку ip/connection, но есть некоторые проблемы с разрешением. Другой распространенной ошибкой является отключенный удаленный доступ к серверу базы данных mysql (или для данного пользователя), таким образом, потенциальная потребность в настройке, т.е. доступ к ssh, или для изменения настроек конфигурации mysql serlvler.

  • 0
    Спасибо за ответ, я использую виртуальную машину для проверки этого. Я изменил порт как 3306, но та же проблема
  • 0
    Можете ли вы подтвердить, используете ли вы localhost для своего сервера mysql в настройках / настройках приложения и также присутствует ли сервер mysql на вашей виртуальной машине? Ваш текущий json использует порт 3307, как я вижу, и он также использует localhost. Если вы попытаетесь использовать этот же сервер базы данных, вам потребуется изменить «localhost» на соответствующий IP, если только на виртуальной машине не настроен и не запущен сервер mysql с такими же настройками.
0

я предполагаю, что ваш демон mysql не работает как root, только пользователь root может привязываться к портам ниже 1024. Но это может быть еще 10 вещей. Мой совет: запустите mysql на нем по умолчанию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню