Архивирование списаний
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");
при выполненни скрипта выскакивает ошибка
вот то место в скрипте
в чем может быть дело?
Код: Выделить всё
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");}
Архивирование таблиц
Народ, хватит эту тему мусолить уже, могу предложить вам свой вариант решения данной проблемы viewtopic.php?t=7353. Процесс архивации моментальный, 17 гиов база заархивировалась за 0.9 сек. Только просьба, внимательно читайте мои предписания к скрипту. Ребята которые код скриптов публиковали в этой теме, спасибо вам за публикацию, взял некоторые фрагменты с ваших скриптов и полностью поменял логику. В общем смотрите код, дорабатывайте если нужно под себя:) Работает на 100%!
Извините, что поднимаю тему. Помогите решить проблему после запуска скрипта №2 (Magnum72) таблица dhs_sessions_log и messages скопировались нормально, а вот discount_transactions_all и discount_transactions_iptraffic_all создались только bak таблицы в дроугую базу они не перенеслись. В таблице archives запись только dhs_sessions_log. Скрипт выдал ошибку при копировании этих таблиц. Номера строк не запомнил. Как все это исправить. Да messages=0
через тругой скрипт вот такая ошибка
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.
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.
Добрые люди, а у меня вот такая ситуация.
У нас версия биллинга 5.2.1-005 и архивирование таблиц, он, я так понимаю не поддерживает (((
в связи с этим что посоветуете?
обновляться до более поздней версии? или можно использовать ваши скрипты, но тогда, я так понимаю, нужно будет проделать с базами какие то дополнительные манипуляции. например создать ручками таблицу arсhives ну или еще там чего то например....
ну и собственно я так полагаю биллинг всё равно не сможет работать с этими таблицами архивироваными и придется делать запросы уже ручками. хотя это как раз не критично.
и заработают ли вообще эти скрипты на 005?
дайте какие нить рекомендации или советы, буду очень признателен.
У нас версия биллинга 5.2.1-005 и архивирование таблиц, он, я так понимаю не поддерживает (((
в связи с этим что посоветуете?
обновляться до более поздней версии? или можно использовать ваши скрипты, но тогда, я так понимаю, нужно будет проделать с базами какие то дополнительные манипуляции. например создать ручками таблицу arсhives ну или еще там чего то например....
ну и собственно я так полагаю биллинг всё равно не сможет работать с этими таблицами архивироваными и придется делать запросы уже ручками. хотя это как раз не критично.
и заработают ли вообще эти скрипты на 005?
дайте какие нить рекомендации или советы, буду очень признателен.
вот я тут посмотрел скрипты ваши, и посетила меня мысль, а что если мне просто создать таблицу archives в базе UTM5, а дальше уже применять ваши скрипты. тогда должно всё отработать хорошо.
После этого я так понимаю в базе UTM5H в корне будут лежать копии таблиц discount_transactions_all и discount_transactions_iptraffic_all разбитые по временным отрезкам, а в основной базе UTM5 они же будут располагаться а таблице archives.
Собственно буду признателен если вы мне скинете образец таблицы archives, чтоб я мог его вставить в свою базу.
...или же как вариант я могу качнуть базу из демо версии биллинга и от туда вытащить таблицу archives...
После этого я так понимаю в базе UTM5H в корне будут лежать копии таблиц discount_transactions_all и discount_transactions_iptraffic_all разбитые по временным отрезкам, а в основной базе UTM5 они же будут располагаться а таблице archives.
Собственно буду признателен если вы мне скинете образец таблицы archives, чтоб я мог его вставить в свою базу.
...или же как вариант я могу качнуть базу из демо версии биллинга и от туда вытащить таблицу archives...