С нами с 02.01.04
Сообщения: 1246
Рейтинг: 54
|
Добавлено: 07/05/08 в 18:54 |
Вот напр если апдейчу базу, не хотелось бы чтобы запросы были.. все сайты соответсвенно что на этой базе хочу заблокировать..
в начале файла думаю добавить что то вроде
if ($db_update) {
выдай сообщение и прекрати поток.
}
Т.е. не хочется else добавлять, чтоб весь html код был в скобках, т.е.
if ($db_update) {
} else {
...
<html></html>
..
}
Такое возможно? Или еще какой более хитрый подход есть?
|
|
|
|
PHP-программинг
С нами с 26.03.07
Сообщения: 821
Рейтинг: 917
|
Добавлено: 07/05/08 в 18:57 |
а если:
Код: |
if ($db_update) {
выдай сообщение и прекрати поток.
exit();
}
|
|
|
|
|
С нами с 16.10.02
Сообщения: 1448
Рейтинг: 1000
|
Добавлено: 07/05/08 в 19:02 |
Еще короче
Код: | if($db_update)
die('closed for maintenance and upgrades'); |
|
|
|
|
+
С нами с 14.02.07
Сообщения: 25
Рейтинг: 28
|
Добавлено: 07/05/08 в 19:12 |
для этого есть ob_start но как то кривоватенько ты придумал, используй шаблоны и не будет в коде куча хтмл.
|
|
|
|
С нами с 02.01.04
Сообщения: 1246
Рейтинг: 54
|
Добавлено: 07/05/08 в 19:16 |
Ну уж как придумал Вообще спасибо всем.. шаблоны же тоже надо как то подключить, подумаю..
|
|
|
|
« ... full on ... »
С нами с 17.03.07
Сообщения: 670
Рейтинг: 1686
|
Добавлено: 07/05/08 в 19:37 |
Не обязательно убивать все запросы и показывать пустые страницы с ошибкой, можно поиграться с LOCK TABLE в MySQL. И, возможно, апдейт базы не будет мешать выборкам.
|
|
Power of the lime madness...
|
3
|
|
|
С нами с 02.01.04
Сообщения: 1246
Рейтинг: 54
|
Добавлено: 07/05/08 в 20:19 |
возможно, я потом проконсультируюсь с суппортом, но как на крайний случай надо иметь наверно..
|
|
|
|
Криптопохуист
С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019
|
Добавлено: 07/05/08 в 23:28 |
С рута в мускуле (в консоли очень желательно)
> FLUSH TABLES WITH READ LOCK;
И все. Отрабатываются последние запросы и все базы глобально локаются.
При этом, терминал не закрывать, из утилиты mysql не выходить. Там же делаем нужные административные телодвижения. В этот момент все приходящие запросы стоят в очереди со статусом "Locked" и ждут пока ты разлочишь базу. Лучше ДО этого подтюнить max_used_connections, чтобы сервер от размера очереди не помер.
Теперь в том же терминале делаем
> UNLOCK TABLES;
Все разлочивается, база работает дальше. В момент лока можно даже снимать физический дамп баз майскула.
А чтобы пых-пых корректно реагировал на эту ситуацию, надо
1. подтюнить таймаут коннекта с мускулем. Он по дефалту 60 секунд в пхп.ини Я бы его заменил на 20. Чтобы апач от ожидающих чайлдов не обосрался.
2.
Код: | $c=@mysql_connect($host,$user,$pass);
if (!is_resource($c)) {
if (mysql_errno()=={Номер ошибки "Too many connections"})
die ("Site is under maintenace, sorry");
else
die ("Could not connect to server");
} |
|
|
|
|
Криптопохуист
С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019
|
Добавлено: 07/05/08 в 23:40 |
пс. про всякие тюнинги это я написал если сервер более-менее нагружен. а если не большая нагрузка, а операции с базой простые и короткие, то можно просто тупо лок - работа - анлок.
|
|
|
|
С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362
|
Добавлено: 08/05/08 в 02:22 |
Запросы к базе занаимают миллисекунды, что там так апдейтишь, что нужно это блокировать?
в 99% случаев, не нужно нечего, если ты грамотно продумал апдейт.
Мое имхо, проблема высосана из пальца.
|
|
|
|
С нами с 02.01.04
Сообщения: 1246
Рейтинг: 54
|
Добавлено: 08/05/08 в 17:27 |
Спасибо за подробные объяснения, и за "васосана"..
Я на всякий случай, говорю же, надо смотреть в будущее, вдруг БД будет потом очень большая
|
|
|
|
С нами с 26.02.03
Сообщения: 2366
Рейтинг: 987
|
Добавлено: 08/05/08 в 23:02 |
Proo писал: |
Т.е. не хочется else добавлять, чтоб весь html код был в скобках, т.е.
if ($db_update) {
} else {
...
<html></html>
..
}
|
Как вариант:
Код: | if ($db_update) {
} else <<<HTML
...
<html></html>
..
HTML; |
|
|
|
|
С нами с 02.01.04
Сообщения: 1246
Рейтинг: 54
|
Добавлено: 09/05/08 в 01:18 |
всех оценил, всем спасибо!
|
|
|
|