Jump to content
Local
mac

Объединение баз данных двух биллингов Ubilling

Recommended Posts

Естественно, ip сети и города - разные, версии Ubilling - одинаковые.
Собственно, как это сделать максимально просто и безопасно?
 
То, до чего сам додумался - это использовать "Модуль Миграция 2"
Для это планирую сделать экспорт нужных полей из базы данных с помощью запроса


 

SELECT
  users.login, users.password, # login;password;
  users.ip, nethosts.mac, # IP;MAC;
  users.tariff, users.cash, users.Credit, users.CreditExpire, # tariff;cash;credit limit;credit expire date;
  city.cityname, # city;
  street.streetname, # street;
  build.buildnum, # build;
  apt.entrance, apt.floor, apt.apt, # entrance;floor;apt;
  phones.phone, phones.mobile, # phone;mobile;
  emails.email, # email;
  userreg.address, # address;
  realname.realname, # realname;
  contracts.contract, # contract;
  users.AlwaysOnline, users.Down, users.Passive  # AlwaysOnline state;Down state;Passive state
FROM
  city, street, build, apt, address, users, nethosts, phones, emails, userreg, realname, contracts
WHERE
  build.streetid = street.id AND
  apt.buildid = build.id AND
  address.aptid = apt.id AND
  address.login = users.login AND
  nethosts.ip = users.IP AND
  userreg.login=users.login AND
  realname.login = users.login AND
  phones.login=users.login AND
  emails.login = users.login AND
  userreg.login = users.login AND
  contracts.login = users.login
INTO OUTFILE '/tmp/ubilling.exp'
FIELDS TERMINATED BY ';'
ENCLOSED BY ''
LINES TERMINATED BY '\n'

 


По sql запросу вопрос прежде всего к уважаемому nightfly : оттуда ли (таблицы, поля) я беру значения?

Edited by mac

Share this post


Link to post
Share on other sites

с такими вопросами....

ручками всё перенесите, вы ж наебнете себе всё без понимания что вы и куда суете

 

имена табличек похожи на правду, пробуйте на виртуалках, сдампите себе БД с первого и пробуйте перенести данные со второго

попутно проверяя всё ли в БД занеслось как надо и не ахуел ли старгейзер от таких манипуляций

Edited by l1ght

Share this post


Link to post
Share on other sites

Да, конечно на виртуалке испытаю сначала.

Просто глубоко не копал, что и где лежит.

Имена полей и таблиц - вроде как адекватны назначению.

Но могут же быть, типа, legacy, и не использоваться в новых версиях убилинга

В частности, смущает таблица users (оч много столбцов)

Share this post


Link to post
Share on other sites

Да, конечно на виртуалке испытаю сначала.

Просто глубоко не копал, что и где лежит.

Имена полей и таблиц - вроде как адекватны назначению.

Но могут же быть, типа, legacy, и не использоваться в новых версиях убилинга

В частности, смущает таблица users (оч много столбцов)

users это то с чем работает старгейзер

 

почитайте FAQ, посмотрите видео в вики есть ссылочки

думаю станет понятнее, а вообще неиспользуемых табличек у нас нет

все важны и все нужны, стартовая позиция собрать все логины и IP из таблички users

это то по чему есть связь по всем остальным таблицам

соотвественно бабло (cash), кредит, имя тарифа, всё остальное живет в других табличках

Share this post


Link to post
Share on other sites

Уже есть готовый SQL запрос выборки всех необходимых данных. Сейчас немного подкорректирую под миграцию 2 и вперед, если Вы желаете так переносить. А вообще вариантов масса.

Share this post


Link to post
Share on other sites

Уже есть готовый SQL запрос выборки всех необходимых данных. Сейчас немного подкорректирую под миграцию 2 и вперед, если Вы желаете так переносить. А вообще вариантов масса.

 

Ну что-то типа такого:

            SELECT 
                    `users`.`login`, `ip`, `mac`, `Tariff`,  `Cash`,  `Credit`, `CreditExpire`, 
                    `cityname`, `streetname`, `buildnum`, `entrance`, `floor`, `apt`,
                    `phones`.`phone`, `mobile`, `emails`.`email`, 
                    concat(`cityname`, ' ', `streetname`, ' ', `buildnum`, IF(`apt`, concat('/',`apt`), '')) AS `fulladress`,
                    `realname`.`realname`, `contract`, `AlwaysOnline`, `Down`, `Passive`                   
            FROM `users` LEFT JOIN `nethosts` USING (`ip`)
                    LEFT JOIN `realname` ON (`users`.`login`=`realname`.`login`)
                    LEFT JOIN `address` ON (`users`.`login`=`address`.`login`)
                    LEFT JOIN `apt` ON (`address`.`aptid`=`apt`.`id`)
                    LEFT JOIN `build` ON (`apt`.`buildid`=`build`.`id`)
                    LEFT JOIN `street` ON (`build`.`streetid`=`street`.`id`)
                    LEFT JOIN `city` ON (`street`.`cityid`=`city`.`id`)
                    LEFT JOIN `phones` ON (`users`.`login`=`phones`.`login`)
                    LEFT JOIN `contracts` ON (`users`.`login`=`contracts`.`login`)
                    LEFT JOIN `emails` ON (`users`.`login`=`emails`.`login`)

Share this post


Link to post
Share on other sites

l1ght, Pautiina, большое спасибо за советы и решения!

Pautiina, в вашем запросе в

`users`.`login`, `ip`,

пропущен `password`. Правильнее будет

`users`.`login`, `password`, `ip`,
Edited by mac

Share this post


Link to post
Share on other sites

Там еще данные по платежам, начислениям АП, нетхосты и куча потрохов других есть. Если логины юзеров, сети, и прочее такое не перекрываются, то в принципе, можно пробовать переносить данные в лоб. Проблема будет, только с адресами из "город-улица-дом", так как там куча связей по id, и хорошо бы писать для этого какой-то "заселятор" на пхп. Ненавижу такие штуки.

Share this post


Link to post
Share on other sites

Ничего (логины юзеров, сети, и прочее такое) не перекрывается.

Т.к. сначала данные были в одном биллинге, потом их разделили на 2 (ломать - не строить).

Дальше они жили своей жизнью. И теперь из-за автоматизации платежей (opayz) их нужно объединить.

Nightfly, Ваше мнение понял, заселятор я не осилю, поэтому - или миграция, или вручную.

Share this post


Link to post
Share on other sites

 

 

Nightfly, Ваше мнение понял, заселятор я не осилю, поэтому - или миграция, или вручную.

Ну по идее, какая-то из миграций должна пытаться угадывать, чего там делать с адресами. Точно не уверен - отродясь ими не пользовался. Кстати экспорт в ЦСВ-шку вроде был в "мастере отчетов".

Остальное да, можно переносить в лоб, тупо табличками.

Share this post


Link to post
Share on other sites

 

l1ght, Pautiina, большое спасибо за советы и решения!

Pautiina, в вашем запросе в

`users`.`login`, `ip`,

пропущен `password`. Правильнее будет

`users`.`login`, `password`, `ip`,

Пусть будет так :)

Share this post


Link to post
Share on other sites

Появились новые вопросы по "Миграции 2"

1. Когда создавать недостающие тарифы - до или после миграции?

2. В wiki есть рекомендация выключить stargazer перед миграцией. Но тогда перестает работать ubilling. Это как раз тот случай, когда нужно использовать опцию NOSTGCHECKPID ?

Share this post


Link to post
Share on other sites

Всім привіт.

З*єдную два убілла.
Мігрігую по вікі "Міграція 2" але щось не прьот. Де косячу підскажіть. Послідовність така: 1. Роблю вибірку з бази і зберігаю в csv. Добавляю в новий білл руцями місто, мережі, дхцп, НАС, тарифи. Далі csv в "міграцію 2". БАчу "First of imported data rows" з данними, далі "Select data columns and their values" в таргеті міняю мережу і тицяю кнопу. Бачу таблоід з юзерами де все гут. Тушу СТГ і тицю "Єс процесс регістрації юзерів". Далі бачу "DEBUG" з усіма юзерами що мігрують і в кінці php скипт. Копіпасс в php консоль і запускаю. Далі цей же скріпт кольоровий і в "Console debug data" порожньо.

Старт СТГ. Заходжу в онлайн а там нема ніхто, з нових мається на увазі.

Edited by sirko.n

Share this post


Link to post
Share on other sites

При спробі на "бойовому" сервері  видало щось новеньке
 

Fatal error: Uncaught Error: Call to undefined function mysql_num_rows() in /usr/local/www/apache24/data/billing/modules/general/sqlconsole/index.php(220) : eval()'d code:16 Stack trace: #0 /usr/local/www/apache24/data/billing/modules/general/sqlconsole/index.php(220): eval() #1 /usr/local/www/apache24/data/billing/index.php(67): include_once('/usr/local/www/...') #2 {main} thrown in /usr/local/www/apache24/data/billing/modules/general/sqlconsole/index.php(220) : eval()'d code on line 16

Перепровірив. Вставляв код в консоль php.

Edited by sirko.n

Share this post


Link to post
Share on other sites
2 часа назад, sirko.n сказал:

При спробі на "бойовому" сервері  видало щось новеньке
 


Fatal error: Uncaught Error: Call to undefined function mysql_num_rows() in /usr/local/www/apache24/data/billing/modules/general/sqlconsole/index.php(220) : eval()'d code:16 Stack trace: #0 /usr/local/www/apache24/data/billing/modules/general/sqlconsole/index.php(220): eval() #1 /usr/local/www/apache24/data/billing/index.php(67): include_once('/usr/local/www/...') #2 {main} thrown in /usr/local/www/apache24/data/billing/modules/general/sqlconsole/index.php(220) : eval()'d code on line 16

Перепровірив. Вставляв код в консоль php.

несовместимость старых версий пхп с новыми

надо код адаптировать под новые реалии mysqli_*

Share this post


Link to post
Share on other sites

З php кодом в мене не дуже ((

Якісь варіки крім "руками" ще можливі?

Share this post


Link to post
Share on other sites
14 минут назад, sirko.n сказал:

З php кодом в мене не дуже (( 

Якісь варіки крім "руками" ще можливі? 

Відсипати кілограм грошей, тим в кого зі всім "дуже".

Share this post


Link to post
Share on other sites

Тоже пришлось выгрузить юзеров из убиллинга в другой биллинг (продали оператора).

получилось что то типа такого

SELECT 
users.login as Login, contracts.contract as Номер_Договора, realname.realname as ФИO,
concat(city.cityname,' ',street.streetname,' ',build.buildnum,'/',apt.apt,' подъезд ',apt.entrance,' этаж ',apt.floor) 
as Адрес_подключения,users.tariff as Тариф,phones.phone as Телефон,phones.mobile as Мобилный,passportdata.birthdate
as Дата_Рождения,concat(passportdata.passportnum,' ',passportdata.passportwho,' ',passportdata.passportdate,' ',passportdata.pcity,' ',passportdata.pstreet,' ',passportdata.pbuild,'-', passportdata.papt) 
as Pass_Data,op_customers.virtualid as Платежный_ID,users.ip as IP,nethosts.mac as MAC,users.cash as Баланс

FROM users join contracts on users.login=contracts.login join realname on realname.login=users.login 
join phones on users.login=phones.login join op_customers on users.login=op_customers.realid 
join nethosts on users.ip=nethosts.ip left join passportdata on users.login=passportdata.login 
left join address on address.login=users.login 
left join apt on address.aptid=apt.id 
left join build on build.id=apt.buildid 
left join street on street.id=build.streetid 
left join city on city.id=street.cityid order by realname.realname;

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By dimonian
      Не получается настроить SMSPILOT, все сделал по инструкции: включил собаку-посылаку, включил SMSZILLA, установил длину номера и код (раскоментировал строки и установил значение), вставил API-ключ, создал список номеров и у клиентов указал номера телефонов. При попытке отправить сообщение клиентам, номера не извлекаются (фильтр настроен, как "отправить всем"). При попытке отправить на номера из списка возникает ошибка Warning: strpos(): Empty needle in /usr/local/www/apache24/data/billing/api/libs/api.workaround.php on line 2813.
      Пробовал на чистом Биллинге, сообщения ставятся в очередь, но не отсылаются. На сервис смс не приходит запрос от Биллинга. Номера извлекаются из списка номеров но Notice: Undefined index: mobile in /usr/local/www/apache24/data/billing/api/libs/api.smszilla.php on line 3093
    • By vovvw
      Здравствуйте, господа форумчане. Помогите пожалуйста решить проблемку с убилингом:
      У абонов нет интернета на новой подсети. Айпи выдаются, шлюз пингуется, интернета нет.
      Система ubuntu 18.04
    • By dimonian
      при настройке smspilot возникла проблема, smszilla и собакапосылака включены, api указан- (баланс счета в биллинге виден)-однако сообщения ставятся в очередь но не отсылаются, на стороне smspilot запросов api нет. При некоторых манипуляциях с телефонами возникает ошибка: 
      Warning: strpos(): Empty needle in /usr/local/www/apache24/data/billing/api/libs/api.workaround.php on line 2813
      Прошу прощения за возможно глупый вопрос.
    • By DAnEq
      root@nas-bras:~/ubinstaller/nas_preconf # ./autosetup.sh ./autosetup.sh: Permission denied.
      ладно, мы не гордые
      root@nas-bras:~/ubinstaller/nas_preconf # sh autosetup.sh The package management tool is not yet installed on your system. Do you want to fetch and install it now? [y/N]: y Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:11:amd64/quarterly, please wait... Verifying signature with trusted certificate pkg.freebsd.org.2013102301... done Installing pkg-1.11.1... Extracting pkg-1.11.1: 100% pkg-1.11.1 Package manager pkgng.installer: pkg2ng: not found NAS_120_64.tar.gz 100% of 99 MB 8287 kBps 00m12s x NAS_120_64/trafshow-5.2.3_2,1.txz далее куча сообщений подобного рода
      и потом
      Installing bandwidthd-2.0.1_11...
      pkg: wrong architecture: FreeBSD:12:amd64 instead of FreeBSD:11:amd64
      и так еще 62 пакета
       
      потом соответственно куча FAIL! not found No such file or directory
       
      но
       
      uname -a
      FreeBSD nas-bras 11.2-RELEASE FreeBSD 11.2-RELEASE #0 r335510: Fri Jun 22 04:32:14 UTC 2018     root@releng2.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC  amd64

      такая же самая на которую на соседней виртуалке без проблем накатил убиллинг

      вопрос.
      что взять для наса ?
      11.0 или 11.1 ?
    • By reductor
      Помогите правильно настроить модуль "По ком звонит колокол" 
      Как правильно сделать запись в Кронтаб asterisk - возможен следующий запрос: /?module=remoteapi&key=[ubserial]&action=asterisk&number=[mobile_number]&param=[login|realname|swstatus]
×