Архивация списаний
Извините архивировал все скриптом товарища JAO. Экспереминты на тестовой базе, делал так - создал базу mysql -e -p "create database UTM5arc DEFAULT CHARACTER SET=utf8;" затем настроил и выполнил скрипт utm521007_arc. Все прошло без ошибок.
В отчетных периодах прошлых месяцов ничего не отображается типо идет поиск и все пусто, а за текущий месяц все есть.
Что-то надо руками в базе подкрутить, ранее занимался utm не я, поэтому даже не в курсе кто и что там делал с базой. Помогите разобратся плиз.
В отчетных периодах прошлых месяцов ничего не отображается типо идет поиск и все пусто, а за текущий месяц все есть.
Что-то надо руками в базе подкрутить, ранее занимался utm не я, поэтому даже не в курсе кто и что там делал с базой. Помогите разобратся плиз.
Добрый день.
В логи стали сыпаться ошибки:
Раньше мы просто удаляли записи из таблиц discount_transactions_all и discount_transactions_iptraffic_all. При этом ничего не делали с auto_increment. Вот и пришли к тому, что достигли максимального значения.
Нашел похожую проблему
Поменяли тип поля ID на bigint командами:
Запустили админку. В итоге в одну таблицу данные продолжились вносится с правильным ID, а во вторую таблицу админка посылает такой запрос:
т.е. вставляется отрицательное значение id.
Почему админка сама отправляет id? Зачем тогда auto increment в этой таблице? Ну и собственно что теперь можно сделать?
Бэкапы, конечно, есть. Но простое восстановление данных из бэкапа проблему не решит.
В логи стали сыпаться ошибки:
Код: Выделить всё
Debug : Aug 28 08:31:07 DBCtx: <680571904> SQL query: INSERT INTO discount_transactions_all(account_id,incoming_rest,outgoing_rest,discount,discount_with_tax,service_id,service_type,slink_id,discount_date,charge_type,discount_period_id) VALUES('7505','377.6775001126434','377.6775001126434','0','0','196','3','73242','1346128267','3','6691')
?Debug : Aug 28 08:31:07 DBCtx: <680571904> MySQL query failed:<Duplicate entry '2147483647' for key 1> Trying to reconnect: 0
?Debug : Aug 28 08:31:10 DBCtx: <680571904> MySQL query failed:<Duplicate entry '2147483647' for key 1> Trying to reconnect: 1
?Debug : Aug 28 08:31:13 DBCtx: <680571904> MySQL query failed:<Duplicate entry '2147483647' for key 1> Trying to reconnect: 2
Нашел похожую проблему
Поменяли тип поля ID на bigint командами:
Код: Выделить всё
ALTER TABLE discount_transactions_all MODIFY COLUMN id bigint NOT NULL AUTO_INCREMENT;
ALTER TABLE discount_transactions_iptraffic_all MODIFY COLUMN id bigint NOT NULL AUTO_INCREMENT;
Код: Выделить всё
?Debug : Aug 28 12:20:02 DBCtx: <680573952> SQL query: INSERT INTO discount_transactions_iptraffic_all(id,account_id,discount,discount_with_tax,service_id,slink_id,discount_date,discount_date_hour,discount_date_day,discount_date_month,t_class,base_cost,ipid,bytes,discount_period_id) VALUES('-2147468507','8025','0','0','159','38405','1346142002','1346140800','1346097600','1343764800','500','0','168058197','2588','6687')
Почему админка сама отправляет id? Зачем тогда auto increment в этой таблице? Ну и собственно что теперь можно сделать?
Бэкапы, конечно, есть. Но простое восстановление данных из бэкапа проблему не решит.
всем привет, хотел попробовать этот скрипт, выдал такую ошибкуJAO писал(а):Скрипт для версии 5.2.1-007 (должен подойти и для 5.2.1-008, судя по документации)
Код: Выделить всё
#!/usr/bin/perl use DBI; $db_host = 'localhost'; $db_user = 'root'; $db_pass = ''; $db_name = 'UTM5'; $db_arc_name = 'UTM5arc'; $tbl_count = 7; @tbl_names = ('discount_transactions_all','discount_transactions_iptraffic_all', 'tel_sessions_log','tel_sessions_detail','dhs_sessions_log','dhs_sessions_detail','payment_transactions'); @tbl_types = (1,2,3,4,5,6,7); @tbl_datefields = ('discount_date','discount_date','recv_date','recv_date','recv_date','recv_date','payment_enter_date'); @tbl_shortnames = ('dta','dti','tsl','tsd','dsl','dsd','ptr'); $dbh = DBI->connect("DBI:mysql:$db_name:$db_host",$db_user,$db_pass,{ RaiseError => 1}) or die "\nConnection failed...\nError: $DBI::errstr\n"; $sth = $dbh->prepare ("SELECT YEAR(NOW())"); $sth->execute (); $y = ($sth->fetchrow_array ())[0]; $sth = $dbh->prepare ("SELECT MONTH(NOW())"); $sth->execute (); $m = ($sth->fetchrow_array ())[0]; $sth = $dbh->prepare ("SELECT UNIX_TIMESTAMP('$y-$m-01 0:00:00')"); $sth->execute (); $end_date = ($sth->fetchrow_array ())[0]; $m--; if ($m == 0) { $m = 12; $y--; } $suffix = sprintf ("%04d_%02d",$y,$m); $sth = $dbh->prepare ("SELECT UNIX_TIMESTAMP('$y-$m-01 0:00:00')"); $sth->execute (); $start_date = ($sth->fetchrow_array ())[0]; $sth = $dbh->prepare ("SELECT MAX(archive_id) FROM archives"); $sth->execute (); $arc_id = ($sth->fetchrow_array ())[0] + 1; undef $sth; for ($j = 0;$j < $tbl_count;$j++) { $tbl_orig = $tbl_names[$j]; $tbl_shortname = $tbl_shortnames[$j]; $tbl_bkp = 'arc_' . $tbl_shortname; $datefield = $tbl_datefields[$j]; $tbl_type = $tbl_types[$j]; $full_arcname = $db_arc_name . "." . $tbl_shortname . "_" . $suffix; print "Processing $tbl_orig\n"; $dbh->do ("ALTER TABLE $tbl_orig RENAME TO $tbl_bkp"); $dbh->do ("CREATE TABLE $tbl_orig LIKE $tbl_bkp"); $dbh->do ("INSERT INTO $tbl_orig SELECT * FROM $tbl_bkp WHERE $datefield>=$end_date"); $dbh->do ("DELETE FROM $tbl_bkp WHERE $datefield>=$end_date"); $dbh->do ("ALTER TABLE $tbl_bkp ENGINE=MyISAM"); $dbh->do ("CREATE TABLE $full_arcname LIKE $tbl_bkp"); $dbh->do ("ALTER TABLE $full_arcname ENGINE=MyISAM"); $dbh->do ("INSERT INTO $full_arcname SELECT * FROM $tbl_bkp"); $dbh->do ("DROP TABLE $tbl_bkp"); $end_date--; $dbh->do ("INSERT INTO archives (archive_id,table_type,table_name,start_date,end_date) VALUES ('$arc_id','$tbl_type','$full_arcname','$start_date','$end_date')"); $end_date++; } $dbh->disconnect ();
Processing discount_transactions_all
DBD::mysql::db do failed: The total number of locks exceeds the lock table size at ./utm5_arch.pl line 52.
utm5.008 up8 база порядка 40гигов
Имеет ли значение поля ID в архивных таблицах? Просто после неведомого глюка при последнем архивировании "Автоматическое приращение" сбросилось на 0, и индекс (поле ID) для таблицы с платежами начался с 1.
Я так понимаю, что приоритет имеет дата? Иначе получается что у меня существуют платежные транзакции с одинаковыми id, но в разных архивных таблицах.
Проблем при выборке отчетов по платежам через админку пока не заметил.
upd. Вообще, чем чревато то, что в таблице с платежами счетчик обнулился?
upd2. По поводу неведомого глюка. Оказалось все банально. Моей ошибкой было запустить скрипт 1 числа месяца в ночь, когда еще не было ни одной платежной транзакции. Соответственно скрипт ничего не перенес в оригинальную таблицу с платежами и отсчет транзакций начался с нуля. Как думаете, есть смысл исправлять подобную проблему? Как я говорил, на выборке данных через амдинку пока никак не отразилось.
Я так понимаю, что приоритет имеет дата? Иначе получается что у меня существуют платежные транзакции с одинаковыми id, но в разных архивных таблицах.
Проблем при выборке отчетов по платежам через админку пока не заметил.
upd. Вообще, чем чревато то, что в таблице с платежами счетчик обнулился?
upd2. По поводу неведомого глюка. Оказалось все банально. Моей ошибкой было запустить скрипт 1 числа месяца в ночь, когда еще не было ни одной платежной транзакции. Соответственно скрипт ничего не перенес в оригинальную таблицу с платежами и отсчет транзакций начался с нуля. Как думаете, есть смысл исправлять подобную проблему? Как я говорил, на выборке данных через амдинку пока никак не отразилось.