Как правильно проверить, живо ли подключение к MySQL?

SevMadVic

Новичок
Как правильно проверить, живо ли подключение к MySQL?

PHP 5.2.9, MySQL 5.1.40

Есть демон на PHP, который после запуска подключается к серверу MySQL и в процессе работы периодически обменивается с ним данными. Случилось так, что в процессе работы демона, сервер MySQL был перезагружен, после чего демон начал вываливать ошибки при каждом обращении к MySQL. Вопрос, собственно, как правильно отловить момент перезагрузки MySQL сервера, чтобы демон мог заново к нему переподключиться, до того, как отправит запрос по несуществующему соединению и получит ошибку?

Два варианта сразу приходят в голову:
1. Подключаться к MySQL при каждом новом запросе, вместо постоянного соединения.
2. Создать тестовую запись в БД и проверять запрос к ней. Получили то, что записали, - подключение живо...

Оба варианта кривые: первый - слишком ресурсоёмкий при большом количестве запросов демона к базе, да и можно наткнуться на лимит подключений (если он есть), а второй - это постоянное получение всё того же ошибочного запроса, но это как-то через одно место.

Натолкните, пожалуйста, на мысль, как можно правильно демоном следить за подключением к MySQL?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Вариант 1 + pconnect
Вариант 3 = http://www.php.net/manual/en/function.mysql-ping.php
 

Wicked

Новичок
обрабатывать ошибку mysql server has gone away bla-bla-bla и схожие с ней: если такие приключились - переподключаемся и повторяем последнюю транзакцию (или запрос) целиком
 

Alexandre

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

SevMadVic

Новичок
Автор оригинала: Alexandre
... если во время итерации произошел сбой, мускул начал давать ошибки, то вышли и начали выполнять итерацию с начала.
Спасибо, тоже вариант, но это надо прикручивать детектор ошибок, тратить время на повторную отсылку данных и т.д. А хочется как раз без ошибок в запросах обойтись. Чтобы MySQL всегда была доступна.

Автор оригинала: Alexandre
... А держать постоянным соединение длительное время, особенно если демон часто засыпает, ни есть гууд.
Согласен, но я пишу демон под большую нагрузку. Предположительно, он будет бОльшую часть времени обрабатывать входящие запросы и практически постоянно вести обмен данными с MySQL. Поэтому, лучшим вариантом, наверное, будет использование mysql_ping(). Я вчера уже всё прикрутил и сейчас тестирую. Пока всё отлично.

Спасибо, комрады! =))
 
Сверху