Ваша логика здесь не подходит, т.к. архивирование делалось 1-й раз за 3 года работы билинга, до этого ни одного архивирования не проводилось.Magnum72 писал(а):Вы вообще вышенаписанное читаете? Все наоборот сделали, я зря логику приводил чтоли?
Архивирование списаний
-
- Сообщения: 1612
- Зарегистрирован: Пт ноя 10, 2006 15:23
Да хоть ежедневно хоть раз в 10 лет, какая разница.MaxDM писал(а):Ваша логика здесь не подходит, т.к. архивирование делалось 1-й раз за 3 года работы билинга, до этого ни одного архивирования не проводилось.Magnum72 писал(а):Вы вообще вышенаписанное читаете? Все наоборот сделали, я зря логику приводил чтоли?
А при чём тут логика как архивировать и не запуск нетапа после архивирования (не запускается даже когда очищаю таблицу archives)?Magnum72 писал(а):Да хоть ежедневно хоть раз в 10 лет, какая разница.MaxDM писал(а):Ваша логика здесь не подходит, т.к. архивирование делалось 1-й раз за 3 года работы билинга, до этого ни одного архивирования не проводилось.Magnum72 писал(а):Вы вообще вышенаписанное читаете? Все наоборот сделали, я зря логику приводил чтоли?
Потому что если делать так как ты сделал то мускул лочит таблицу и начинает заниматся сначала копированием, а потом перемещением, следовательно биллинг не может запустится, как собственно и не может корректно работать.MaxDM писал(а):А при чём тут логика как архивировать и не запуск нетапа после архивирования (не запускается даже когда очищаю таблицу archives)?Magnum72 писал(а):Да хоть ежедневно хоть раз в 10 лет, какая разница.MaxDM писал(а):Ваша логика здесь не подходит, т.к. архивирование делалось 1-й раз за 3 года работы билинга, до этого ни одного архивирования не проводилось.Magnum72 писал(а):Вы вообще вышенаписанное читаете? Все наоборот сделали, я зря логику приводил чтоли?
-
- Сообщения: 1612
- Зарегистрирован: Пт ноя 10, 2006 15:23
по мотивам Магнума получилось примерно так:
UPD: Исправлены баги. Спасиба Магнуму за комменты.
Комменты по багам приветствуются.#!/usr/bin/perl -w
use DBI;
use strict;
my $dbh; my $sth; my $ts; my @res; my $tmp;
# Обязательно сменить
my $dbuser='';
my $dbpass='';
my $dbhost='';
# Дальше лучше не менять
$dbh=DBI->connect("DBI:mysql:UTM5:$dbhost", $dbuser, $dbpass, {RaiseError=>1})
or die "\nConnection failed...\nError: $DBI::errstr\n";
$sth=$dbh->prepare("select unix_timestamp(concat(year(now()),'-',month(now()),'-01 00:00:00'))");
$sth->execute();
$ts=($sth->fetchrow_array)[0];
$dbh->do("rename table discount_transactions_all to discount_transactions_all_$ts");
$dbh->do("rename table discount_transactions_iptraffic_all to discount_transactions_iptraffic_all_$ts");
$sth=$dbh->prepare("show create table discount_transactions_iptraffic_all_$ts");
$sth->execute();
if (@res=$sth->fetchrow_array) {
$tmp= $res[1];
$tmp=~ s/discount_transactions_iptraffic_all_$ts/discount_transactions_iptraffic_all/g;
};
$dbh->do($tmp);
$sth=$dbh->prepare("show create table discount_transactions_all_$ts");
$sth->execute();
if (@res=$sth->fetchrow_array) {
$tmp= $res[1];
$tmp=~ s/discount_transactions_all_$ts/discount_transactions_all/g;
};
$dbh->do($tmp);
$dbh->do("insert into discount_transactions_all select * from discount_transactions_all_$ts where discount_date>=$ts");
$dbh->do("insert into discount_transactions_iptraffic_all select * from discount_transactions_iptraffic_all_$ts where discount_date>=$ts");
$dbh->do("delete from discount_transactions_all_$ts where discount_date>=$ts");
$dbh->do("delete from discount_transactions_iptraffic_all_$ts where discount_date>=$ts");
$sth=$dbh->prepare("select max(archive_id) from archives");
$sth->execute();
$tmp=($sth->fetchrow_array)[0];
$tmp+=1;
$dbh->do("insert into archives(archive_id,table_type,table_name,start_date,end_date) SELECT $tmp,1,".$dbh->quote("discount_transactions_all_$ts").",min(discount_date),max(discount_date) from discount_transactions_all_$ts");
$dbh->do("insert into archives(archive_id,table_type,table_name,start_date,end_date) SELECT $tmp,2,".$dbh->quote("discount_transactions_iptraffic_all_$ts").",min(discount_date),max(discount_date) from discount_transactions_iptraffic_all_$ts");
UPD: Исправлены баги. Спасиба Магнуму за комменты.
Последний раз редактировалось mikkey finn Пт дек 19, 2008 09:32, всего редактировалось 1 раз.
Еще нюансPulse писал(а):клёва... работаеттока можно даже поменять местами процедуры занесения в archives и удаления лишнего из таблиц.. ну это на любителя...

Таблицы ренеймить и создавать надо одной транзакцией,
или в крайнем случае соблюдать определенную логическую последовательность так как discount_transactions_iptraffic_all зависит от discount_transactions_all :
1. Переименовываем discount_transactions_all (тут биллинг начинает мотать головой и говорить "и кудаже мене писать?")
2. Переименовываем discount_transactions_iptraffic_all (Сюда он вообще не лезет, потому как перед запросом ему нажно получить ил из пункт 1)
3. Создаем discount_transactions_iptraffic_all (Аналогисно пункт 2)
4.Создаем discount_transactions_all (Тут биллинг видит табличку и говорит "Аааа вона куда ..." )
иначе может получится такая ситуация что первую таблицу мы пересоздали, а вторую пересоздали чуть позже, следовательно те записи которые умудрились создастся в период между первой и второй могут непонятно куда отъехать, на это собственно пофигу, но зачем лишний раз провоцировать билинг

ЗЫ Хинт если еще не удалили автоинкремент из таблицы discount_transactions_iptraffic_all можете это сделать счас

Все нормально будет, так как биллинг будет писать продолжая автоинкремент, а впихивать остатки будут с тем инкрементом который был у этих записей ранееPulse писал(а):ну я бы ваще не стал запускать последний скрипт архивации на работающем биллинге, ибо как тока создали новую таблицу биллинг будет туда писать и скрипт будет писать остатки... может получиться галиматья...
Здраствуйте... хотел бы попросить помощи по данному вопросу:
если не сложно... можно пример или линк на мануал?Magnum72 писал(а):по поводу уменьшения размера таблиц: на самом деле глубоко пофиг, сколько они занимают места. по сути это файловая система мускула на файловой системе операционки, на скорость это никак не влияет, только на размер.
что казается размера:
Советую вам перевести движок иннодб в режим одна таблица один файл, перестанет быть доступной возможность ставить связанные межтабличные индексы, но они все равно не используются в виду того что база изначально под них не запроектирована
в этом случае размер каждой таблицы можно уменьшить командой ALTER TABLE ...
как это написать в коде? учитывая этот комментарий:Magnum72 писал(а):бегин
ренаме discount_transactions_all в discount_transactions_all_хххх
смотрим автоинкремент ид у discount_transactions_all_хххх
креате табле discount_transactions_all с автоинкремент из discount_transactions_all_хххх
далее спокойно переносим маленький кусочек данных из discount_transactions_all_хххх в discount_transactions_all
тоже самое с discount_transactions_iptraffic_all
коммит
Magnum72 писал(а):Еще нюанс
Таблицы ренеймить и создавать надо одной транзакцией,
или в крайнем случае соблюдать определенную логическую последовательность так как discount_transactions_iptraffic_all зависит от discount_transactions_all :
1. Переименовываем discount_transactions_all (тут биллинг начинает мотать головой и говорить "и кудаже мене писать?")
2. Переименовываем discount_transactions_iptraffic_all (Сюда он вообще не лезет, потому как перед запросом ему нажно получить ил из пункт 1)
3. Создаем discount_transactions_iptraffic_all (Аналогисно пункт 2)
4.Создаем discount_transactions_all (Тут биллинг видит табличку и говорит "Аааа вона куда ..." )
иначе может получится такая ситуация что первую таблицу мы пересоздали, а вторую пересоздали чуть позже, следовательно те записи которые умудрились создастся в период между первой и второй могут непонятно куда отъехать, на это собственно пофигу, но зачем лишний раз провоцировать билинг
-
- Сообщения: 1612
- Зарегистрирован: Пт ноя 10, 2006 15:23
Поищите по форуму выложенный магнумом конфиг mysql. Настройки конфига крутите под себя.TEPbEP писал(а):Здраствуйте... хотел бы попросить помощи по данному вопросу:если не сложно... можно пример или линк на мануал?Magnum72 писал(а): Советую вам перевести движок иннодб в режим одна таблица один файл, перестанет быть доступной возможность ставить связанные межтабличные индексы, но они все равно не используются в виду того что база изначально под них не запроектирована
в этом случае размер каждой таблицы можно уменьшить командой ALTER TABLE ...
А вот это решается тем скриптом, который я выложил и обновил уже выше.как это написать в коде? учитывая этот комментарий:Magnum72 писал(а):бегин
ренаме discount_transactions_all в discount_transactions_all_хххх
смотрим автоинкремент ид у discount_transactions_all_хххх
креате табле discount_transactions_all с автоинкремент из discount_transactions_all_хххх
далее спокойно переносим маленький кусочек данных из discount_transactions_all_хххх в discount_transactions_all
тоже самое с discount_transactions_iptraffic_all
коммитMagnum72 писал(а):Еще нюанс
Таблицы ренеймить и создавать надо одной транзакцией,
или в крайнем случае соблюдать определенную логическую последовательность так как discount_transactions_iptraffic_all зависит от discount_transactions_all :
1. Переименовываем discount_transactions_all (тут биллинг начинает мотать головой и говорить "и кудаже мене писать?")
2. Переименовываем discount_transactions_iptraffic_all (Сюда он вообще не лезет, потому как перед запросом ему нажно получить ил из пункт 1)
3. Создаем discount_transactions_iptraffic_all (Аналогисно пункт 2)
4.Создаем discount_transactions_all (Тут биллинг видит табличку и говорит "Аааа вона куда ..." )
иначе может получится такая ситуация что первую таблицу мы пересоздали, а вторую пересоздали чуть позже, следовательно те записи которые умудрились создастся в период между первой и второй могут непонятно куда отъехать, на это собственно пофигу, но зачем лишний раз провоцировать билинг
Один нюанс моего скрипта, я делаю это все без транзакций, т.к. база у меня в myisam.