Переподключение PHP к MySQL как правильно организовать?

Столкнулся со следующей проблемой, PHP-процесс постоянно висит в памяти, и периодически кидает запросы в БД.
Однако столкнулся с проблемой, что если нет внешней активности, то он не обращается к базе и та закрывает соединение.

Есть собственно механизм mysqli::ping - который проверяет соединение и восстанавливает подключение, если оно утрачено. Смотрю сейчас документацию (https://www.php.net/manual/ru/mysqli.configuration...) - а там жирным написано:
Внимание Функция УСТАРЕЛА с PHP 8.4.0. Пользоваться функцией настоятельно не рекомендуют.


окей, читаем дальше, есть глобальная настройка mysqli.reconnect, переходим к ней (https://www.php.net/manual/ru/mysqli.configuration...) и читаем такое:
Замечание: Эта настройка игнорируется драйвером "mysqlnd" и была удалена в PHP 8.2.0.


В итоге я не понимаю как верно организовать процесс подключения, чтоб он работал на любых версиях PHP - как 5.4, так и 8.4 и не вызывал проблем

Может кто-то сталкивался?
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Ловить исключение, если ошибка 2006, то переподключаться и повторять запрос. Можно организовать в своём враппере поверх PDO или mysqli.
Менее универсальный способ - увеличить таймаут для сессии
SET session wait_timeout=28800
SET session interactive_timeout=28800
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Vitsliputsli
Самый правильный вариант - отключаться, если соединение не используется. Правильно, т.к. не используем ресурсы для поддержания ненужного соединения, ни на клиенте, ни на сервере. И не ловим эксепшены.
И только если ну никак нельзя это контролировать, тогда реконнект по эксепшену.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы