Восстановление связи с базой данных

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.
Вот небольшой кусок тестового кода:
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;
		

	}
}
Сторонние библиотеки типа PEAR не использую, все самодельное.
Для запросов предполагалось использовать доработанную функцию _SAFE_REQUEST.
$db->reconnect() показывать не буду всеравно не работает и там только 2 строки.
Помогите пожалуйста найти решение.
 

alpine

Новичок
Ahmea
1) MySQL server has gone away - вовсе не означает что "сервер mysql иногда на моем хостинге перестает ненадолго работать"
2) Читать это чтобы лучше понимать что происходит/может происходить A.2.8. MySQL server has gone away
3) Воспользоваться поиском по форуму, похожие проблемы обсуждались.
 

Ahmea

Новичок
Уважаемый alpine.
Прежде чем ответить, вы бы для начала внимательно почитали, то что было написано выше. Дублирую: я вручную останавливаю и запускаю сервер для теста. Под сервером имеется ввиду mysql сервер. Я прошу помочь мне сделать защиту от непредусмотренных отваливаний mysql. Проблема заключается в том, что после запуска mysql соединение не восстанавливается. Я прошу помочь сделать мне защиту моего скрипта от таких ситуаций. Пример кода который должен был это делать вы могли видеть выше.
А именно я хочу, чтобы при невозможности выполнить mysql запрос программа посылала мне смс или сообщение по icq и переходила в режим ожидания. Когда база mysql опять начнет работать программа должна продолжить свою работу.

Ну нету нормального программиста, чтобы на сях эту ерунду написать, денег тоже лишних нету, приходтся маразмом заниматься и делать самостоятельно как и на чем умею.
 

alpine

Новичок
Прежде чем ответить, вы бы для начала внимательно почитали, то что было написано выше.
Почитал, почитал внимательно.
ублирую: я вручную останавливаю и запускаю сервер для теста. Под сервером имеется ввиду mysql сервер.
Я ответил, что причин может быть 10к а не только та которую вы написали.
А именно я хочу, чтобы при невозможности выполнить mysql запрос программа посылала мне смс или сообщение по icq и переходила в режим ожидания. Когда база mysql опять начнет работать программа должна продолжить свою работу.
Родненький терпение, придет другой добрый программист и все вам расскажет.
Ну нету нормального программиста, чтобы на сях эту ерунду написать, денег тоже лишних нету, приходтся маразмом заниматься и делать самостоятельно как и на чем умею.
(пафосно)Ах, как жаль.
PS :D
 

Ahmea

Новичок
alpine так меня и не понял. Попрошу тебя не флудить в моем топике. Как все остальное мне реализовывать я знаю. Мне нужна помощь только в том, что было написано выше.

>>> Я ответил, что причин может быть 10к а не только та которую вы написали.

- это не причина, а способ проверить корректность работы скрипта.

-~{}~ 17.09.06 15:19:

Решение найдено, вопрос закрыт.
 
Сверху