Pomelo MySqlException: невозможно подключиться к любому из указанных MySQL хостов - PullRequest
0 голосов
/ 18 февраля 2020

Я работаю над проектом на стороне сервера Blazor, который должен работать на сервере Ubuntu Linux 18.04LTS. (ПРИМЕЧАНИЕ. Этот проект не использует веб-сборку.)

Я использую C# и пакет nuget Pomelo.EntityFrameWorkCode.MySql (v3.1.1) для подключения к базе данных MySQL, работающей на Linux server.

Когда я запускаю приложение локально в моей Windows системе разработки, все работает правильно. Когда я публикую sh файлы на сервере Linux, он работает около 5% времени - в остальное время я получаю сообщение об ошибке

Pomelo MySqlException: Невозможно подключиться к любому из указанные MySQL хосты

Я подключаюсь к одной и той же базе данных MySQL как на моей системе Windows, так и на сервере Linux. MySQL работает на Linux, правильные порты открыты и т. Д. c.

Более подробное сообщение об ошибке:

Произошло необработанное исключение при обработке запроса. , MySqlException: невозможно подключиться к любому из указанных MySQL хостов. MySqlConnector.Core.ServerSession.ConnectAsyn c (ConnectionSettings cs, ILoadBalancer loadBalancer, IOBehavior ioBehavior, CancellationToken cancellationToken) в C: \ projects \ mysqlconnector \ src \ MySq1102. * InvalidOperationException: было сгенерировано исключение, которое, вероятно, связано с временной ошибкой. Подумайте о том, чтобы включить устойчивость к кратковременным ошибкам, добавив функцию EnableRetryOnFailure () к вызову «Использовать MySql». Pomelo.EntityFrameworkCore. MySql .Storage.Internal.MySqlExecutionStrategy.Execute (состояние TState, операция Fun c, Fun c> verifySucceeded)

MySqlException: невозможно подключиться к любому из указанных MySQL хосты. MySqlConnector.Core.ServerSession.ConnectAsyn c (ConnectionSettings cs, ILoadBalancer loadBalancer, IOBehavior ioBehavior, CancellationToken cancellationToken) в C: \ projects \ mysqlconnector \ src \ MySqlConnect.SecConnect.SecConnect 1080 * (соединение MySqlConnection, IOBehavior ioBehavior, CancellationToken cancellationToken) в> C: \ projects \ mysqlconnector \ src \ MySqlConnector \ Core \ ConnectionPool.cs MySqlConnector.Core. cancellationToken) в> C: \ projects \ mysqlconnector \ src \ MySqlConnector \ Core \ ConnectionPool.cs System.Threading.Tasks.ValueTask.get_Result () System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable +Get. Data.MySqlClient.MySqlConnection.CreateSessionAsyn c (пул ConnectionPool, Nullable ioBehavior, CancellationToken cancellationToken) в C: \ projects \ mysqlc onnector \ src \ MySqlConnector \ MySql .Data.MySqlClient \ MySqlConnection.cs System.Threading.Tasks.ValueTask.get_Result ()

System.Runtime. MySql .Data.MySqlClient. Data.MySqlClient.MySqlConnection.Open () в C: \ projects \ mysqlconnector \ src \ MySqlConnector \ MySql .Data.MySqlClient \ MySqlConnection.cs .Storage.RelationalConnection.Open (ошибки boolExpected)

Pomelo.EntityFrameworkCore. MySql .Storage.Internal.MySqlRelationalConnection.Open (ошибки boolExpected)

Microsoft.EntityFrawork. RelationalCommand.ExecuteReader (RelationalCommandParamet erObject параметрObject) Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable + Enumerator.InitializeReader (DbContext _, bool result) Pomelo.EntityFrameworkCore. MySql .Storage.Internal. MySqlExecutionStrategy.Execute (состояние TState, операция Fun c, Fun c> verifySucceeded)

Конфигурация в классе автозагрузки выглядит следующим образом:

services.AddDbContext<LabDataDbContext>(options => {             
    options.UseMySql(Configuration.GetConnectionString("LabDbConnection"));
        options.EnableDetailedErrors();
});

Моя строка подключения это:

"server=server.grafton.internal;port=3306;database=labdb;user=******;password=******;charset=utf8"

Интересно то, что я могу использовать MySQL Workbench и подключаться к базе данных либо из моей системы Windows dev, либо с сервера Linux, используя точно такие же учетные данные.

Это приложение предназначено для запуска только дома, а сервер, на котором запущено приложение, не отображается в Inte rnet, поэтому меня не слишком беспокоит проблема безопасности (если кто-то хочет узнать, что такое куча аутентичностей). c дети имеют как оборудование, так и занятия, они могут его иметь !!)

Пытаясь изолировать ошибку, я полностью удалил и повторно развернул приложение на другом linux сервере в сети с тот же результат, но, как я уже говорил ранее, примерно в 5% случаев приложение работает как положено на сервере linux.

Другие страницы в приложении, которые НЕ работают использовать базы данных работают правильно, поэтому я не думаю, что это проблема с веб-сервером (NGinx в качестве обратного прокси-сервера Kestrel).

Я также хочу подчеркнуть, что приложение работает около 5% времени на linux и 100% времени на Windows - оба подключаются к одному и тому же MySQL серверу на linux.

Если требуется больше примеров кода, приложение на Github на https://github.com/SteveTeece/Lab.

Это меня озадачило. Любые идеи о том, как это исправить и запустить его на сервере Linux, приветствуются.

Спасибо

1 Ответ

0 голосов
/ 23 февраля 2020

Спасибо всем за ваши отзывы и комментарии.

После нескольких дней возни я решил эту проблему, используя

Server=localhost;

в строке производственного соединения вместо полного доменного имени. .

...