Помело MySQL (.NET Core) не удается восстановить после сбоя базы данных - PullRequest
0 голосов
/ 31 мая 2018

Прошлой ночью в AWS RDS возникла «проблема с подключением к Интернету», которая вскоре была решена.Однако мое приложение (которое работает в .NET Core и подключается к экземпляру RDS MySQL через Pomelo.EntityFrameworkCore.MySql) никогда не сможет восстановить соединение с базой данных, даже если сервер MySQL снова был в сети.Я проверил соединение со своей локальной машины, и оно работало просто отлично.Затем я повторно развернул приложение .NET Core, и все снова заработало.

Есть ли что-то, что мне нужно создать заново (возможно, в контексте db), или есть что-то, что мне нужно, что мне нужно кэшироватьсбросить, чтобы попытаться подключиться снова?Я подключаюсь через имя хоста, и моя строка подключения выглядит примерно так:

server=something.somewhere.us-east-2.rds.amazonaws.com;userid=XXXX;password=YYYYY;database=ZZZZ

Вот генерируемое исключение:

MySqlException: Unable to connect to any of the specified MySQL hosts.
at MySqlConnector.Core.ServerSession+<ConnectAsync>d__56.MoveNext (C:\projects\mysqlconnector\src\MySqlConnector\Core\ServerSession.cs:239)

и вот как я создаю свой контекст БД в автозагрузке.cs: ​​

services.AddDbContext<BlayFapContext>(opt => opt.UseMySql(Settings.Instance.SQLConnectionString));

Любая помощь будет принята с благодарностью.

Giawa

1 Ответ

0 голосов
/ 01 июня 2018

Хорошо, мы решили, что случилось.Оболочка MySQL Pomelo имела проблему, описанную в их репозитории git здесь: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/434

По сути, если база данных MySQL недоступна при первом использовании строки подключения, она будет кэшироваться как недействительная и никогда не будет работатьснова.Вы можете легко это подтвердить, запустив сервис без подключения к MySQL, проверив, что он не работает, затем запустите MySQL и убедитесь, что сервис по-прежнему не работает.Он никогда не сможет установить соединение MySQL после того, как первая строка соединения будет признана недействительной.

Они исправили его вскоре после выпуска 2.0.1, но с тех пор они не обновили Nuget новой версией, несмотря напроблема найдена 6 месяцев назад.Итак, исправление заключается в извлечении исходного кода их репозитория и его исправлении самостоятельно.Мы обнаружили, что исправление здесь работает просто отлично: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/pull/456

Итак, почему была повторена попытка подключения?У нас уже была успешная связь!Оказывается, проблема с подключением к Интернету в дата-центре в Огайо не ограничивалась RDS, но также затрагивала EC2.Наш экземпляр EC2 был перезагружен как часть исправления, и соединение MySQL было недействительным при перезагрузке из-за продолжающихся проблем с подключением.Состояние этого соединения было кэшировано, и, хотя сервер MySQL снова подключился к сети, наш сервис работал в режиме ожидания.

Giawa

...