Ahmea
Новичок
Восстановление связи с базой данных
Здраствуйте.
Я пишу программу daemon, которая будет постоянно висеть на сервере и работать.
Мне нужно недопустить ее вылетания с ошибкой или зависания. Так как в работе сервера иногда могут возникать проблемы, я стараюсь предусмотреть их все. А именно сейчас у меня осталась последняя проблема - это то, что сервер mysql иногда на моем хостинге перестает ненадолго работать.
Так вот вопрос, как восстановить соединиение с mysql не завершая при этом скрипта? Такие сложности от того, что сохранить текущее состояние моей программы и потом вернуться к нему очень сложно.
Использовались следующие функции: mysql_ping, mysql_pconnect, mysql_connect, но выхода не было найдено. Я вручную останавливаю и запускаю сервер для теста. Одна и таже ошибка MySQL server has gone away.
У меня Apache/2.2.0, mysql 5.0.18, PHP 4.4.1.
Вот небольшой кусок тестового кода:
Сторонние библиотеки типа PEAR не использую, все самодельное.
Для запросов предполагалось использовать доработанную функцию _SAFE_REQUEST.
$db->reconnect() показывать не буду всеравно не работает и там только 2 строки.
Помогите пожалуйста найти решение.
Здраствуйте.
Я пишу программу daemon, которая будет постоянно висеть на сервере и работать.
Мне нужно недопустить ее вылетания с ошибкой или зависания. Так как в работе сервера иногда могут возникать проблемы, я стараюсь предусмотреть их все. А именно сейчас у меня осталась последняя проблема - это то, что сервер mysql иногда на моем хостинге перестает ненадолго работать.
Так вот вопрос, как восстановить соединиение с mysql не завершая при этом скрипта? Такие сложности от того, что сохранить текущее состояние моей программы и потом вернуться к нему очень сложно.
Использовались следующие функции: mysql_ping, mysql_pconnect, mysql_connect, но выхода не было найдено. Я вручную останавливаю и запускаю сервер для теста. Одна и таже ошибка MySQL server has gone away.
У меня Apache/2.2.0, mysql 5.0.18, PHP 4.4.1.
Вот небольшой кусок тестового кода:
PHP:
function _SAFE_REQUEST($module, $type, $sql, $_SLEEPTIME)
{
global $db, $log;
$_STAT = false;
$_N = false;
while (!$_STAT)
{
if ($type == "query") $result = $db->query($sql);
if ($type == "getOne") $result = $db->getOne($sql);
if ($type == "getAll") $result = $db->getAll($sql);
if ($db->error)
{
if (!$_N) $log->write($module, "Сбой работы базы данных. Ожидаю восстановления связи с базой.");
$_N = true;
_WAIT_DB_CONNECTION($module, $_SLEEPTIME);
}
else
{
$_STAT = true;
if ($_N) $log->write($module, "Работа базы данных восстановилась. Продолжаю работу.");
}
}
return $result;
}
function _WAIT_DB_CONNECTION($module, $_SLEEPTIME)
{
global $db, $log;
$_STAT = false;
while (!$_STAT)
{
sleep($_SLEEPTIME);
clearstatcache();
if (is_file(ROOT."triggers/allstop.cmd"))
{
$log->write($module, "Экстренная остановка.");
die();
}
if ($db->reconnect())
$_STAT = true;
}
}
Для запросов предполагалось использовать доработанную функцию _SAFE_REQUEST.
$db->reconnect() показывать не буду всеравно не работает и там только 2 строки.
Помогите пожалуйста найти решение.