Laravel Horizon: ErrorException: Предупреждение: PDO :: prepare (): сервер MySQL удален - PullRequest
1 голос
/ 27 апреля 2019
  • Laravel Версия: 5.7.28
  • Версия PHP: 7.2.15
  • Драйвер базы данных и версия: MariaDB 10.2.23

Я борюсь с ошибкой на моем производственном сервере, используя Horizon.

ErrorException: Предупреждение: PDO :: prepare (): сервер MySQL удален [внутренняя] в несериализации

Вы можете увидеть трассировку стека здесь: https://sentry.io/share/issue/b105b7946b524a9e841f56f44445ea14/

Насколько я могу судить, эта ошибка должна быть обнаружена фреймворком Laravel. Я не уверен, почему он не перехватывается и не превращается в QueryException, который затем вызывает переподключение и / или убивает работника.

См .: https://github.com/laravel/framework/blob/9fb420cc29a7dd5de5051f09c523ffc3ea01b969/src/Illuminate/Database/Connection.php#L663

А потом: https://github.com/laravel/framework/blob/9fb420cc29a7dd5de5051f09c523ffc3ea01b969/src/Illuminate/Database/Connection.php#L735

Насколько я понимаю, любое Исключение должно быть перехвачено и затем переброшено как Исключение Query, которое затем будет правильно перехвачено платформой и затем повторно подключено к базе данных.

Это случайная ошибка, поэтому ее трудно воспроизвести; Я пытался вручную выдать похожую ошибку, но она правильно перехватывается и обрабатывается.

Любое общее руководство о том, почему эта ошибка может быть разной в производстве, и идеи о том, как я могу ее выделить, будут оценены.

1 Ответ

0 голосов
/ 22 июля 2019

В случае, если кто-то еще столкнется с этим, текущая теория состоит в том, что Sentry ловит ошибки, которые все еще должным образом обрабатываются платформой.

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

Для справки смотрите это обсуждение на Github:

https://github.com/laravel/horizon/issues/583

...