Биллинговая система Nodeny

Главная категория => Курилка => Тема начата: keeper1978 от 01 Июля 2010, 17:30:27



Название: y2010x6x30
Отправлено: keeper1978 от 01 Июля 2010, 17:30:27
как пробороть ошибку
DBD::mysql::db do failed: Table './bill/y2010x6x30' is marked as crashed and should be repaired at nodeny.pl line 1157.

я так понимаю она связанна с переходом на новый месяц  всвязи с этим вопрос какие данные nodeny не сохранила


Название: Re: y2010x6x30
Отправлено: stix от 01 Июля 2010, 18:34:56
через phpmyadmin можешь сделать repair

можно с консоли сделать через mysqlcheck


Название: Re: y2010x6x30
Отправлено: ser970 от 01 Июля 2010, 18:37:17
c консоли

mysql -u root -pпароль bill

repair table y2010x6x30;

это не с переходом - это повреждена таблица мускула.


Название: Re: y2010x6x30
Отправлено: versus от 01 Июля 2010, 20:03:43

я так понимаю она связанна с переходом на новый месяц  всвязи с этим вопрос какие данные nodeny не сохранила

Если отсутствие системного администратора связано с переходом на новый месяц, то да. Если отсутствие бесперебейника связано с переходом на новый месяц, то да. Если бэкапы не делаются в связи с переходом на новый месяц, то да.

Интерсно что могла не сохранить нодени в поврежденную таблицу с дневным трафиком ???


Название: Re: y2010x6x30
Отправлено: keeper1978 от 01 Июля 2010, 22:58:15

Если бэкапы не делаются в связи с переходом на новый месяц, то да.
а при чём здесь бэкапы ? если эти таблицы не бэкапятся


Название: Re: y2010x6x30
Отправлено: Efendy от 01 Июля 2010, 23:07:13

Если бэкапы не делаются в связи с переходом на новый месяц, то да.
а при чём здесь бэкапы ? если эти таблицы не бэкапятся
там скрыта ирония. Потому что вопрос явно глупый, а та часть которая не глупая неоднократно обсуждена. Во-первых, как физическое повреждение таблицы связано с NoDeny? Я пока еще не умею так вредить, но подумаю. Во-вторых - ремонт поврежденных таблиц обсужден и на форуме и вообще внесен в FAQ.html:

Цитировать
Если есть таблицы с поврежденной структурой, то необходимо запустить утилиту с указанием отремонтировать такие таблицы:

bash# mysqlcheck -repair -p -u bill_kernel bill

из доки посвежее:
Код:
mysqlcheck -repair -u root --password=`perl -e'require "/usr/local/nodeny/history.nod"; print $sql_root_pass;'` bill 


Название: Re: y2010x6x30
Отправлено: ser970 от 02 Июля 2010, 20:52:52
а кстати появилась идейка - билинг пишет что повреждена таблица - почему не пойти чуть далее и дописать пару строк - что бы таблица сама востанавливалась - по логике ничего сложного.

подскажите как намеренно повредить таблицу? нужно для теста.


Название: Re: y2010x6x30
Отправлено: goletsa от 02 Июля 2010, 21:59:02
Не надо.
Все нештатные ситуации надо обрабатывать руками чтобы ваша автоматика вместо починки окончательно не доломала все.


Название: Re: y2010x6x30
Отправлено: stix от 02 Июля 2010, 22:03:19
все уже придумано.
через тот же --log-bin
Код:
или вот mysqlcheck -A -r
myisamchk -r /var/lib/mysql/*/*.MYI


Название: Re: y2010x6x30
Отправлено: Efendy от 04 Июля 2010, 11:45:15
а кстати появилась идейка - билинг пишет что повреждена таблица - почему не пойти чуть далее и дописать пару строк - что бы таблица сама востанавливалась - по логике ничего сложного.
это не биллинг пишет, а перловый модуль для работы с БД. В принципе можно отлавливать его сообщения и парсить, но во-первых я не уверен, что сообщение стандартизировано и в будущем не изменится, а во-вторых это явно излишний функцинал - в нормальных системах (с нормальным питанием) повреждения таблиц не будет никогда, так что проверять нет никакого смысла.


Название: Re: y2010x6x30
Отправлено: blackjack от 04 Июля 2010, 13:32:40
это не биллинг пишет, а перловый модуль для работы с БД. В принципе можно отлавливать его сообщения и парсить, но во-первых я не уверен, что сообщение стандартизировано и в будущем не изменится, а во-вторых это явно излишний функцинал - в нормальных системах (с нормальным питанием) повреждения таблиц не будет никогда, так что проверять нет никакого смысла.
1. ви не забувайте шо ми живемо в Україні
2. маленькі піонер-мережі не можуть собі дозволити "нормальні системи (з нормальним живленням)"

імхо. виправляти таблиці білінг не повинен


Название: Re: y2010x6x30
Отправлено: ser970 от 04 Июля 2010, 17:34:47
Все нештатные ситуации надо обрабатывать руками чтобы ваша автоматика вместо починки окончательно не доломала все.
хм. а чем будет отличатся или ручками набрана или сриптом? или ручками учитываются тайминги - и метод чумака-кашпировского?


Название: Re: y2010x6x30
Отправлено: versus от 04 Июля 2010, 20:13:44
При  крахе БД вина ляжет по другому, в случае автоматического исправления биллингом, вина за крах БД ложится на разработчиков нодени, в случае  запуска админом в терминала - на того кто запустил с терминала.

Вы можете дописать функциональность в виде модуля, но тогда все обращения клиентов будем переадресовывать вам.


Название: Re: y2010x6x30
Отправлено: versus от 04 Июля 2010, 20:18:09
Есть три уровня восприятия: что, как, и зачем.
И вкладывая 1 килокалорию усилий на решение проблемы на каждом уровне приводит к «отдаче инвестиций» на порядки отличающейся.
Поясню: например я пишу программу.
Уровень «что» — я выделил для этого специальное время, записал про задачу в списки, напоминания, все такое… В результате написал программу. Зашибись.
Уровень «как» — прежде чем писать программу, покумекал, спросил умных людей, купил готовые компоненты, нанял ассистента… В результате написал программу в два раза быстрее. Зашибись.
Уровень «зачем» — Покумекал, и понял — что мне не нужна программа, в принципе. А мне нужно новое железо, которое аппаратным образом делает то же самое, но потребляет меньше всего остального. Но, правда, стоит соответственно. Денег нет. Но результат работы железа, нужен не только мне, а еще куче кому в здании. Обошел людей, поговорил — они скинулись, курьеры доставили, распаковал-установил — Profit!
Заняло все дело 3 дня, и приносит деньги ежемесячно. Вот это — зашибись!

(с) HEDO http://hedo.habrahabr.ru/


Название: Re: y2010x6x30
Отправлено: ser970 от 05 Июля 2010, 09:09:57
имелось в виду сдалать так (найду способ повредить таблици или кто поделится файоами поврежленых таблиц сделаю)

если таблица повреждена  суточного трафа то сначала скопируем этот файл в любое место а потом попробуем востановить таблицу - так вроде безопасно и хуже чем есть не сделаешь. при аварии остальных таблиц ничего не делать.
написать не сложно - но как повредить таблицу?


Название: Re: y2010x6x30
Отправлено: goletsa от 05 Июля 2010, 11:30:48
Выдерни питание у работающего сервера.
Поимеешь сразу кучу проблем - побитая фс и ессно побитая база.


Название: Re: y2010x6x30
Отправлено: ser970 от 05 Июля 2010, 13:45:06
пробовал;
написал скрипт кторый пишет в цикле с таблицу данные - не получилось.лад попробую еще


Название: Re: y2010x6x30
Отправлено: stix от 05 Июля 2010, 14:22:13
ну на самом то деле у тебя база сама по себе не упадет.
тебе проще в rc.local вставить проверку таблиц при некорректном выключении и автоматическое исправление если на то пошло.


Название: Re: y2010x6x30
Отправлено: VitalVas от 05 Июля 2010, 20:09:02
пробовал;
написал скрипт кторый пишет в цикле с таблицу данные - не получилось.лад попробую еще
а если скрипт заклинит?


Название: Re: y2010x6x30
Отправлено: stix от 05 Июля 2010, 20:10:55
я вот не пойму...неужели так часто у кого-то падают базы?


Название: Re: y2010x6x30
Отправлено: VitalVas от 05 Июля 2010, 20:17:17
я вот не пойму...неужели так часто у кого-то падают базы?
за последний год, у меня не разу не падала
поэтому я не вижу смысла в скриптах, а в случае падения, даже мануала хватает


Название: Re: y2010x6x30
Отправлено: stix от 05 Июля 2010, 20:29:44
я тоже вот думаю, что смысла в скрипте нет абсолютно.
база упадет, если упадет файловая система.
а если упадет файловая система ext2, то "Да хранит тебя Господь, если не делал бэкапы"

должна запустится автоматом fsck
а следом за ней поставь mysql repair и делов-то, а не колбасить каждый раз биллинг


Название: Re: y2010x6x30
Отправлено: Fredik от 05 Июля 2010, 22:46:19
...............................

а следом за ней поставь mysql repair и делов-то, а не колбасить каждый раз биллинг

а у тебя так и реализовано?
не поделишся ?


Название: Re: y2010x6x30
Отправлено: VitalVas от 05 Июля 2010, 23:01:24
...............................

а следом за ней поставь mysql repair и делов-то, а не колбасить каждый раз биллинг

а у тебя так и реализовано?
не поделишся ?
+1


Название: Re: y2010x6x30
Отправлено: ser970 от 06 Июля 2010, 10:07:01
база упадет, если упадет файловая система.
не обязательно. да и в рс конф прописать fsck.

а если упадет файловая система ext2,
всегда считал что ufs

следом за ней поставь mysql repair и делов-то, а не колбасить каждый раз биллинг
и интересно какое время при старте займет это дело когда база в 5г?

а в 98% падают только  таблицы  дневного тарфика. вот их то и имеет смысл проверить - можно даже не в бидинг писать а просто перед стартом nodeny.sh и после старта мускула написать простенький скрипт который их проверит.





Название: Re: y2010x6x30
Отправлено: stix от 06 Июля 2010, 12:38:00
...............................

а следом за ней поставь mysql repair и делов-то, а не колбасить каждый раз биллинг

а у тебя так и реализовано?
не поделишся ?
+1
в линухе, в /etc/rc.sysinit есть процедура проверки системы, при неправильном выключании системы
есть строки

Код:
if [ -f /fsckoptions ]; then
        fsckoptions=`cat /fsckoptions`
fi

if [ -f /forcefsck ] || strstr "$cmdline" forcefsck ; then
        fsckoptions="-f $fsckoptions"
elif [ -f /.autofsck ]; then
        [ -f /etc/sysconfig/autofsck ] && . /etc/sysconfig/autofsck
        if [ "$AUTOFSCK_DEF_CHECK" = "yes" ]; then
                AUTOFSCK_OPT="$AUTOFSCK_OPT -f"
        fi
        if [ -n "$AUTOFSCK_SINGLEUSER" ]; then
                echo
                echo $"*** Warning -- the system did not shut down cleanly. "
                echo $"*** Dropping you to a shell; the system will continue"
                echo $"*** when you leave the shell."
                [ -n "$SELINUX_STATE" ] && echo "0" > $selinuxfs/enforce
                sulogin
                [ -n "$SELINUX_STATE" ] && echo "1" > $selinuxfs/enforce
        fi
        fsckoptions="$AUTOFSCK_OPT $fsckoptions"
fi

if [ "$BOOTUP" = "color" ]; then
        fsckoptions="-C $fsckoptions"
else
        fsckoptions="-V $fsckoptions"
fi

ну и дальше описываются варианты условий, при каких делать только рид-онли на фс итд.

можно вставить проверку таблиц с префиксом y2010x итд


Название: Re: y2010x6x30
Отправлено: ser970 от 06 Июля 2010, 14:19:23
гдето так

touch /usr/local/etc/rc.d/mysqlr.pl

chmod +x /usr/local/etc/rc.d/mysqlr.pl

#!/usr/bin/perl

use DBI;
use Time::localtime;
use Time::HiRes qw (gettimeofday tv_interval);

#даные для сондинения с базой
$user='root';
$pw='pas';
$name='bill';
$server='localhost';
$port="3306";
$mysql_connect_timeout=10;

$DSN="DBI:mysql:database=$name;host=$server;mysql_connect_timeout=$mysql_connect_timeout";
$dbh=DBI->connect($DSN,$user,$pw,{PrintError=>1});
sub mtime
{
 my $t=localtime(shift);
 return sprintf("%dx%dx%d ",$t->year+1900,$t->mday,$t->mon+1);
}
$tab=&mtime(time());
$table='v'.$tab;
my $sth = $dbh->prepare(qq{repair table $table});
$sth->execute();
$table='x'.$tab;
my $sth = $dbh->prepare(qq{repair table $table});
$sth->execute();
$table='y'.$tab;
my $sth = $dbh->prepare(qq{repair table $table});
$sth->execute();
$table='z'.$tab;
my $sth = $dbh->prepare(qq{repair table $table});
$sth->execute();

exit;