Архивирование списаний

Технические вопросы по UTM 5.0
Ответить
CarTer
Сообщения: 62
Зарегистрирован: Пн май 26, 2008 09:18

Сообщение CarTer »

Ура со всем разобрался
у кого в отчетах за прошлый месяц 0 по трафику
в таблице archives надо поставить table_type
1 для discount_transactions_all, 2 для discount_transactions_iptraffic_all

Аватара пользователя
hRUst
Сообщения: 56
Зарегистрирован: Ср фев 22, 2006 13:16
Откуда: Канск

Сообщение hRUst »

table_type должен быть или 1 или 2, там ошибки в скрипте, в регулярных выражениях.
вот работающий вариант:

Код: Выделить всё

#!/usr/bin/perl -w
use DBI;
use strict;
my $dbh; my $sth; my $ts; my @res; my $tmp;
# Обязательно сменить
my $dbuser='';
my $dbpass='';
my $dbhost='localhost';
# Дальше лучше не менять
$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 UTM5H.discount_transactions_all_$ts");
$dbh->do("rename table discount_transactions_iptraffic_all to UTM5H.discount_transactions_iptraffic_all_$ts");
$sth=$dbh->prepare("show create table UTM5H.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 UTM5H.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 UTM5H.discount_transactions_all_$ts where discount_date>=$ts");
$dbh->do("insert into discount_transactions_iptraffic_all select * from UTM5H.discount_transactions_iptraffic_all_$ts where discount_date>=$ts");
$dbh->do("delete from UTM5H.discount_transactions_all_$ts where discount_date>=$ts");
$dbh->do("delete from UTM5H.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("UTM5H.discount_transactions_all_$ts").",min(discount_date),max(discount_date) from UTM5H.discount_transactions_all_$ts");
$dbh->do("insert into archives(archive_id,table_type,table_name,start_date,end_date) SELECT $tmp,2,".$dbh->quote("UTM5H.discount_transactions_iptraffic_all_$ts").",min(discount_date),max(discount_date) from UTM5H.discount_transactions_iptraffic_all_$ts");

starchik
Сообщения: 461
Зарегистрирован: Сб ноя 22, 2008 22:07

Сообщение starchik »

при выполненни скрипта выскакивает ошибка

Код: Выделить всё

Copy delta: discount_transactions_all
DBD::mysql::db do failed: Got error 5 from storage engine at /netup/utm5/bin/archive.sh line 81.
DBD::mysql::db do failed: Got error 5 from storage engine at /netup/utm5/bin/archive.sh line 81.
вот то место в скрипте

Код: Выделить всё

76 sub copy_delta { 
77 my $t_name = shift; 
78 my $t_col = shift; 
79 my $e_date = shift; 
80 print "Copy delta: $t_name\n"; 
81 $dbh->do("INSERT INTO $t_name SELECT * FROM $t_name"."_bak WHERE $t_col>=$e_date");
82 $dbh->do("DELETE FROM $t_name"."_bak WHERE $t_col>=$e_date");}
в чем может быть дело?

starchik
Сообщения: 461
Зарегистрирован: Сб ноя 22, 2008 22:07

Сообщение starchik »

что ни у кого небыло такой траблы? неужели я одинок? :(

starchik
Сообщения: 461
Зарегистрирован: Сб ноя 22, 2008 22:07

Сообщение starchik »

проблемма решилась обновлением мускуля до версии 5.1.36-1

может кому еще пригодится :)

kirush
Сообщения: 699
Зарегистрирован: Пт фев 04, 2005 13:58

Сообщение kirush »

а special_transactions никто не архивирует?

Аватара пользователя
Lex
NetUP Team
Сообщения: 623
Зарегистрирован: Ср мар 09, 2005 12:12
Откуда: НетАП
Контактная информация:

Сообщение Lex »

kirush писал(а):а special_transactions никто не архивирует?
Таблица давно объявлена устаревшей и в текущей схеме базы данных отсутствует.

murano
Сообщения: 67
Зарегистрирован: Ср окт 14, 2009 06:53

Архивирование таблиц

Сообщение murano »

Народ, хватит эту тему мусолить уже, могу предложить вам свой вариант решения данной проблемы viewtopic.php?t=7353. Процесс архивации моментальный, 17 гиов база заархивировалась за 0.9 сек. Только просьба, внимательно читайте мои предписания к скрипту. Ребята которые код скриптов публиковали в этой теме, спасибо вам за публикацию, взял некоторые фрагменты с ваших скриптов и полностью поменял логику. В общем смотрите код, дорабатывайте если нужно под себя:) Работает на 100%!

lancelot
Сообщения: 248
Зарегистрирован: Вс янв 23, 2005 16:28

Сообщение lancelot »

Magnum72 писал(а):
mikkey finn писал(а):Переименование не является транзакционной операцией. Лочка тоже вроде не нужна. так что оба скрипта хороши. В каждом есть лишнее и в каждом есть полезное.
Надо из двух собрать один :)
собрали?

Softal
Сообщения: 1
Зарегистрирован: Пн фев 01, 2010 14:56

Сообщение Softal »

Извините, что поднимаю тему. Помогите решить проблему после запуска скрипта №2 (Magnum72) таблица dhs_sessions_log и messages скопировались нормально, а вот discount_transactions_all и discount_transactions_iptraffic_all создались только bak таблицы в дроугую базу они не перенеслись. В таблице archives запись только dhs_sessions_log. Скрипт выдал ошибку при копировании этих таблиц. Номера строк не запомнил. Как все это исправить. Да messages=0

Puzan_aga
Сообщения: 105
Зарегистрирован: Чт сен 11, 2008 10:43

Сообщение Puzan_aga »

у меня ошибочка выводится при архивации.

gs# ./archive.sh
DBD::mysql::db do failed: The total number of locks exceeds the lock table size at ./archive.sh line 31.
DBD::mysql::db do failed: The total number of locks exceeds the lock table size at ./archive.sh line 31.

В чем может быть проблема ?

Puzan_aga
Сообщения: 105
Зарегистрирован: Чт сен 11, 2008 10:43

Сообщение Puzan_aga »

через тругой скрипт вот такая ошибка

Copy delta: discount_transactions_all
Copy delta: discount_transactions_iptraffic_all
Copy delta: messages
Copy delta: dhs_sessions_log
Copy: dhs_sessions_log to archive UTM5H.dhs_sessions_log_201002
DBD::mysql::db do failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 at ./archive.sh line 99.
DBD::mysql::db do failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 at ./archive.sh line 99.

Puzan_aga
Сообщения: 105
Зарегистрирован: Чт сен 11, 2008 10:43

Сообщение Puzan_aga »

Не кто не поможет в моей проблеме ? А то в mysql не шарю.

FreeBSD 7.2

MySQL версии 5.1.36

UTM 5.2.1-007 (update 10)

drag0mir
Сообщения: 64
Зарегистрирован: Сб ноя 24, 2007 13:46
Откуда: Нижний Новгород

Сообщение drag0mir »

Добрые люди, а у меня вот такая ситуация.
У нас версия биллинга 5.2.1-005 и архивирование таблиц, он, я так понимаю не поддерживает (((
в связи с этим что посоветуете?
обновляться до более поздней версии? или можно использовать ваши скрипты, но тогда, я так понимаю, нужно будет проделать с базами какие то дополнительные манипуляции. например создать ручками таблицу arсhives ну или еще там чего то например....
ну и собственно я так полагаю биллинг всё равно не сможет работать с этими таблицами архивироваными и придется делать запросы уже ручками. хотя это как раз не критично.
и заработают ли вообще эти скрипты на 005?
дайте какие нить рекомендации или советы, буду очень признателен.

drag0mir
Сообщения: 64
Зарегистрирован: Сб ноя 24, 2007 13:46
Откуда: Нижний Новгород

Сообщение drag0mir »

вот я тут посмотрел скрипты ваши, и посетила меня мысль, а что если мне просто создать таблицу archives в базе UTM5, а дальше уже применять ваши скрипты. тогда должно всё отработать хорошо.
После этого я так понимаю в базе UTM5H в корне будут лежать копии таблиц discount_transactions_all и discount_transactions_iptraffic_all разбитые по временным отрезкам, а в основной базе UTM5 они же будут располагаться а таблице archives.
Собственно буду признателен если вы мне скинете образец таблицы archives, чтоб я мог его вставить в свою базу.
...или же как вариант я могу качнуть базу из демо версии биллинга и от туда вытащить таблицу archives...

Ответить