Я создал приложение 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
я получаю:
соединение должно быть действительным и открытым
но учетные данные верны, как я могу диагностировать проблему?
Порт по умолчанию для mysql - 3306, и я сомневаюсь, что ваш сервер mysql работает на порту 80 в Linux. Вероятно, вы получаете доступ к вашему webapp на этом порту в среде Linux (например, apache или nginx) или когда вы используете его REST api.
Если все работает в вашей локальной среде, но не запускается, когда вы используете его на удаленном (Linux) сервере, возможно, вы пытаетесь получить доступ к той же базе данных с удаленного сервера, но вы либо используете localhost в своей конфигурации, либо вы используйте правильную строку ip/connection, но есть некоторые проблемы с разрешением. Другой распространенной ошибкой является отключенный удаленный доступ к серверу базы данных mysql (или для данного пользователя), таким образом, потенциальная потребность в настройке, т.е. доступ к ssh, или для изменения настроек конфигурации mysql serlvler.
я предполагаю, что ваш демон mysql не работает как root, только пользователь root может привязываться к портам ниже 1024. Но это может быть еще 10 вещей. Мой совет: запустите mysql на нем по умолчанию.