Как исправить предупреждение «сервер ушел», когда mysqli переподключает постоянное соединение? - PullRequest
1 голос
/ 07 апреля 2019

При подключении к базе данных с постоянным соединением (чтобы избежать накладных расходов времени соединения), PHP предупреждает, что «сервер ушел». Это код, который я использую:

$db = new mysqli("p:10.0.0.1", "user", "pass");

Я посмотрел на следующие вопросы:

И куча других. Ни один из них не совпадает с моей проблемой: у них либо есть долгосрочные сценарии или запросы, либо они спрашивают, как автоматически переподключиться при этой ошибке. В моем случае это не долго работающий скрипт (это пул соединений), и это не ошибка: скрипты вроде бы работают нормально, просто выводит это уродливое предупреждение. Пул соединений PHP содержит только те соединения, для которых истекло время ожидания.

На моем предыдущем сервере я очень редко видел это предупреждение. Фактически, была проблема с зависанием страниц (теперь устранена), которая часто показывала это предупреждение или ошибку (я не помню какая) через несколько минут. Я так и не понял, в чем проблема, но, похоже, это связано.

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

Это просто ошибка в PHP или есть параметр конфигурации, который ее разрешает? Я видел, как кто-то рекомендовал более длительный тайм-аут на стороне MariaDB, но это только уменьшает частоту, с которой мы будем видеть предупреждения вместо того, чтобы решать проблему фундаментально. Может ли PHP время от времени проверять свой пул или просто удалять старые подключения из пула?

Я также проверил страницы документации ( 1 , 2 ), но в документации и комментариях упоминается эта проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...