Sork
NoDeny
Пользователь
Карма: 3
Offline
Сообщений: 29
Nodeny 50.32.
|
|
« Ответ #22 : 02 Октября 2010, 19:50:00 » |
|
сделал переезд с 45q на последнюю 50.32, полу-ручная, но все же работает, итак порядок переезда: 1) Проинсталлировать Nodeny50.32 по инструкции, провести базововую настройку, добавить в том же порядке как и в Nodeny 45 - улицы, администраторов (с теми же логинами!), услуги, тарифы (с теми же номерами), сделать допополнительное поле "Внешний IP" и идентификатором 13, "email" c идентификатором 14, группы пользователей (сверьте идентификаторы в разделе CASE grp скрипта) 2) сделать бекап базы bill 3) сделать копию данных из Nodeny45 в базу bill45 на том же сервере где стоит Nodeny50. 4) Из-под phpMyAdmin залогинившись под рутом и зайдя в базу bill45 выполнить скрипт (спасибо Versus`у за изначальную версию скрипта). -- Перенос пользователей с паролями и группами. INSERT INTO bill.users (SELECT id,ip,name,AES_ENCRYPT(pass,'hardpass3') as passwd, CASE grp WHEN '0' THEN '1' WHEN '6' THEN '2' WHEN '1' THEN '3' ELSE '1' END AS grp, mid,contract,modify_time as contract_date,state,auth,balance,"0.00" as money,limit_balance, CASE block_if_limit WHEN 'yes' THEN '1' WHEN 'no' THEN '0' ELSE '0' END AS block_if_limit, sortip,modify_time,fio,srvs,paket,next_paket,"0" as paket3, "0" as next_paket3, start_day, "0" as discount, hops, cstate, UNIX_TIMESTAMP(NOW()) as cstate_time, comment, lstate, "0" AS detail_tarif FROM bill45.users ORDER BY id);
-- перенос трафика INSERT INTO bill.users_trf (SELECT id,ip,0,0,0,0,paket,in1,out1,in2,out2,in3,out3,in4,out4,0,0,0,0,0,0,0,0,'',0,0,0,0,0,0 FROM bill45.users);
-- перенос платежей USE bill; TRUNCATE TABLE `pays`; ALTER TABLE bill.pays ADD `flag` CHAR(1) AFTER `category`; INSERT INTO bill.pays (SELECT p.id,mid,cash,time,IF(a.id IS NULL,0,a.id),INET_ATON(admin_ip),0,bonus,reason,coment,0,0,flag FROM bill45.pays AS p LEFT JOIN bill.admin AS a ON p.admin=a.admin);
UPDATE bill.pays SET type=10,category=110,bonus='y' WHERE flag='i'; UPDATE bill.pays SET type=10 WHERE flag='p'; UPDATE bill.pays SET type=20 WHERE flag='t'; UPDATE bill.pays SET type=30 WHERE flag='m' AND bonus=''; UPDATE bill.pays SET type=40 WHERE flag='a'; UPDATE bill.pays SET type=50 WHERE flag='m' AND bonus<>''; ALTER TABLE bill.pays DROP flag; delete from bill.pays where cash=0 and bonus='u' and type=50; delete from bill.pays where cash=0 and bonus='t' and type=50; delete from bill.pays where cash=0 and bonus='x' and type=50; delete from bill.pays where cash=0 and bonus='a' and type=50; delete from bill.pays where cash=0 and bonus='b' and type=50; delete from bill.pays where cash=0 and bonus='c' and type=50; delete from bill.pays where cash=0 and bonus='d' and type=50;
update bill.pays set reason=replace(reason,'Заказ на смену пакета в следующем месяце: ',''),bonus='',category=428 WHERE cash=0 AND reason LIKE 'Заказ на смену пакета в следующем месяце: %' AND type=50 AND bonus='e';
update bill.pays set reason=replace(reason,'Администратор изменил данные:',''),bonus='',category=410 WHERE cash=0 AND reason LIKE 'Администратор изменил данные:%' AND type=50 AND bonus='1'; UPDATE bill.pays SET category=410,bonus='' WHERE cash=0 AND type=50 AND bonus='1';
UPDATE bill.pays SET category=411,bonus='' WHERE cash=0 AND type=50 AND bonus='h';
update bill.pays set reason=replace(reason,'Первая авторизация. Устанавливаю день начала потребления услуг = ',''),bonus='',category=422 WHERE cash=0 AND reason LIKE 'Первая авторизация. Устанавливаю день начала потребления услуг = %' AND type=50 AND bonus='l';
update bill.pays set reason='',bonus='',category=421 WHERE cash=0 AND reason LIKE 'Первая авторизация. Учетная запись выведена из состо%' AND type=50;
update bill.pays set reason='',bonus='',category=421 WHERE cash=0 AND reason LIKE 'Первое потребление трафика. Учетная запись выведена из состо%' AND type=50;
update bill.pays set reason=replace(reason,'Первое потребление трафика клиентом. Устанавливаю день начала потребления услуг = ',''),category=422,bonus='' WHERE cash=0 AND reason LIKE 'Первое потребление трафика клиентом. Устанавливаю день начала потребления услуг = %' AND type=50;
update bill.pays set category=1000 where type=20;
UPDATE bill.pays SET category=420,bonus='' WHERE cash=0 AND bonus='v' AND type=50;
UPDATE bill.pays SET category=460 WHERE cash=0 AND bonus='j' AND type=50; UPDATE bill.pays SET category=461 WHERE cash=0 AND bonus='g' AND type=50;
UPDATE bill.pays SET category=408 WHERE type=40 AND category=0;
UPDATE bill.pays SET category=490 WHERE mid>0 AND type=30 AND admin_id<>0; UPDATE bill.pays SET category=492 WHERE mid>0 AND type=30 AND admin_id=0; UPDATE bill.pays SET category=495 WHERE mid>0 AND type=30 AND coment='' AND reason<>'' AND admin_id<>0; update bill.pays set category=600 where mid>0 and type=10 and bonus='' and cash>0; update bill.pays set category=700 where mid>0 and type=10 and bonus='' and cash<0; 5) Исправляем перед денег между администраторами. Здесь я поленился, придется вручную заменить <id> на идентификатор админа, Adm_login - на логин админа (и так для всех админов). UPDATE bill.pays SET pays.reason=<id> WHERE pays.reason LIKE "%Adm_login%"; UPDATE bill.pays SET pays.coment=<id> WHERE pays.coment LIKE "%Adm_login%"; UPDATE bill.pays SET pays.reason=<id2> WHERE pays.reason LIKE "%Adm_login2%"; UPDATE bill.pays SET pays.coment=<id2> WHERE pays.coment LIKE "%Adm_login2%"; ... 6) Переносим дополнительные поля (спасибо bondar за изначальную версию скрипта). Переносятся: улица, дом, квартира, телефон, МАК, разрешение smtp (в таком порядке были в 45й версии), Email из поля "Комментарий к адресу", внешний IP. convert.pl#!/usr/bin/perl #
# Настройки скрипта $admin_id = 1; $add_time = time; $revision = 1;
# Настройка доступа к базе данных $dbname='bill45'; # Имя БД $dbuser='root'; # Логин БД $dbpass='root_pass'; # Пароль БД
use DBI; $DSN="DBI:mysql:database=$dbname;host=localhost;"; $dbh = DBI->connect($DSN,$dbuser,$dbpass); unless ($dbh) { print ("Error Database"); }
# Настройка доступа к базе данных $dbname1='bill'; # Имя БД $dbuser1='root'; # Логин БД $dbpass1='root_pass'; # Пароль БД
$DSN1="DBI:mysql:database=$dbname1;host=localhost;"; $dbh1 = DBI->connect($DSN1,$dbuser1,$dbpass1); unless ($dbh1) { print ("Error Database"); }
$sth=$dbh->prepare("SELECT `id`, `street`, `house`, `room`, `telefon`, `adress`, `privat_ip`, `allow_proxy` FROM `users`;"); $sth->execute(); while ($p=$sth->fetchrow_hashref){ $dop=$p->{'allow_proxy'}; $id=$p->{'id'}; $street=$p->{'street'}; $house=$p->{'house'}; $room=$p->{'room'}; $telefon=$p->{'telefon'}; $email=$p->{'adress'}; $privat_ip=$p->{'privat_ip'}; $privat_ip=~ s/-//g; ($ipmac,$smtp,undef,undef,undef)=split(/\|/,$dop); $ipmac=~ s/\#//s; $ipmac=~ s/-/:/g; $smtp= ($smtp eq 'yes'?1:0); print "$id - $ipmac - $smtp - $street - $house - $room - $telefon - $email - $privat_ip\n"; $dbh1->do("INSERT INTO `dopvalues` (`line_id`, `parent_id`, `dopfield_id`, `field_value`, `admin_id`, `time`, `revision`) VALUES (0, '$id', '$id_dop', '$to_insert', '$admin_id', '$add_time', '$revision');"); $revision=$dbh1->last_insert_id(0,bill,"dopvalues",line_id); $dbh1->do("DELETE FROM `dopvalues` WHERE line_id =$revision"); if($ipmac){ $id_dop=4;$to_insert=$ipmac; $dbh1->do("INSERT INTO `dopvalues` (`line_id`, `parent_id`, `dopfield_id`, `field_value`, `admin_id`, `time`, `revision`) VALUES (0, '$id', '$id_dop', '$to_insert', '$admin_id', '$add_time', '$revision');"); } if($smtp){ $id_dop=3;$to_insert=$smtp; $dbh1->do("INSERT INTO `dopvalues` (`line_id`, `parent_id`, `dopfield_id`, `field_value`, `admin_id`, `time`, `revision`) VALUES (0, '$id', '$id_dop', '$to_insert', '$admin_id', '$add_time', '$revision');"); } if($street){ $id_dop=5; $to_insert=$street; $dbh1->do("INSERT INTO `dopvalues` (`line_id`, `parent_id`, `dopfield_id`, `field_value`, `admin_id`, `time`, `revision`) VALUES (0, '$id', '$id_dop', '$to_insert', '$admin_id', '$add_time', '$revision');"); $id_dop=6; $to_insert=$house; $dbh1->do("INSERT INTO `dopvalues` (`line_id`, `parent_id`, `dopfield_id`, `field_value`, `admin_id`, `time`, `revision`) VALUES (0, '$id', '$id_dop', '$to_insert', '$admin_id', '$add_time', '$revision');"); $id_dop=8; $to_insert=$room; $dbh1->do("INSERT INTO `dopvalues` (`line_id`, `parent_id`, `dopfield_id`, `field_value`, `admin_id`, `time`, `revision`) VALUES (0, '$id', '$id_dop', '$to_insert', '$admin_id', '$add_time', '$revision');"); } if($telefon){ $id_dop=9; $to_insert=$telefon; $dbh1->do("INSERT INTO `dopvalues` (`line_id`, `parent_id`, `dopfield_id`, `field_value`, `admin_id`, `time`, `revision`) VALUES (0, '$id', '$id_dop', '$to_insert', '$admin_id', '$add_time', '$revision');"); } if($privat_ip){ $id_dop=13; $to_insert=$privat_ip; $dbh1->do("INSERT INTO `dopvalues` (`line_id`, `parent_id`, `dopfield_id`, `field_value`, `admin_id`, `time`, `revision`) VALUES (0, '$id', '$id_dop', '$to_insert', '$admin_id', '$add_time', '$revision');"); } if($email){ $id_dop=14; $to_insert=$email; $dbh1->do("INSERT INTO `dopvalues` (`line_id`, `parent_id`, `dopfield_id`, `field_value`, `admin_id`, `time`, `revision`) VALUES (0, '$id', '$id_dop', '$to_insert', '$admin_id', '$add_time', '$revision');"); }
} 7) после этого логинимся в nodeny50 и делаем проверку (Операции - Проверка). с этого момента все пользователи с платежами и сообщениями полностью перенесены. Потеряны - история трафика, топология, логи.
|