PDA

Просмотр полной версии : Проблема с конвертацией базы mySQL


GrAmOzEkA
16.10.2009, 09:37
Народ помогите решить одну проблему. Есть база mySQL с серийниками к программам около 120 000. Структура базы такая:
__ ____ ______ _______
| | | | |
|ID|soft|serial|comment|
|__|____|______|_______|

В столбце soft находится информация о названии программы. В serial логины,серийники,ключи и т.д.
Прблема состоит в том что я хочу разделить информацию о имени пользователя и серийнике:
__ ____ ______ _______ _______
| | | | | |
|ID|soft| name |serial |comment|
|__|____|______|_______|_______|

Столбец name имя пользователя, serial серийник.

Например было:

INSERT INTO `base_serials` VALUES (0,'AfterCam 2.4', 'Name: LAXiTY s/n: slajwfcdmxypwdwzahwhw', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Address Everywhere 2.81', 'Name: archigamedis Password: DiSTiNCT s/n: 2104005254', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'AcqURL 5.3', 's/n: 893668581437812682205368 ', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'All-Purpose Legal Documents 1.01', 'Name: TEAM EViDENCE Company: TEAM EViDENCE s/n: 697-3033-061', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Advanced Popup Killer 2002 2.1', 'Name: iNTENSiON s/n: 214547403613104583621042757fA2 or Name: shadow_DWRF s/n: 214547403613104583621042757fA2', 'NULL', 'NULL');

А надо:

INSERT INTO `base_serials` VALUES (0,'AfterCam 2.4', 'Name: LAXiTY', 's/n: slajwfcdmxypwdwzahwhw', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Address Everywhere 2.81', 'Name: archigamedis', 'Password: DiSTiNCT s/n: 2104005254', 'NULL');
INSERT INTO `base_serials` VALUES (0,'AcqURL 5.3', 'NULL', 's/n: 893668581437812682205368', 'NULL');
INSERT INTO `base_serials` VALUES (0,'All-Purpose Legal Documents 1.01', 'Name: TEAM EViDENCE Company: TEAM EViDENCE', 's/n: 697-3033-061', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Advanced Popup Killer 2002 2.1', 'Name: iNTENSiON', 's/n: 214547403613104583621042757fA2', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Advanced Popup Killer 2002 2.1', 'Name: shadow_DWRF', 's/n: 214547403613104583621042757fA2', 'NULL');

Примерно так, иногда там где s/n: стоит key: или password: и т.д.

Gray_Wolf
16.10.2009, 10:12
Ну можно сделать бекап базы а потом просто сделать замену:
s/n: на ' , 's/n:
key: на ' , 'key:
Ну или распарсить всю базу регулярками для надёжности...

Byte_
16.10.2009, 10:12
если я всё правильно понял, то нужно написать php скрипт с регуляркой, которая будет отделять NAME: ------ и до пробела в старой таблице и писать в новую.
т.к. записей очень много - стоит воспользоваться LIMIT. что-бы в ручную не перезапускать скрипт - можно по завершению очередного цикла обработки отображать браузеру яваскрипт, который передаст в url следующее значение limit

Gray_Wolf
16.10.2009, 10:13
120 000
Много? о_О

Byte_
16.10.2009, 10:15
всё очень сильно зависит от сервера - где всё это лежит. ;)

Gray_Wolf
16.10.2009, 10:19
всё очень сильно зависит от сервера - где всё это лежит. ;)
В любом случае подобные операции на "живой" БД делать нельзя, так что так и так придётся это делать на другой машине.

Byte_
16.10.2009, 10:23
согласен.
Вот регулярку накидал
Name: .*(?=s\/n)
проверял на яваскрипте. работает, но нужно предварительно пробели пропарсить (что-бы 2 пробела в некоторых местах на один заменить)

GrAmOzEkA
16.10.2009, 10:38
Забыл сказать, иногда бывает что имени пользователя нет, а серийник есть, его надо перебросить из name в serial и занулить name, так же иногда встречаются конструкции:
Name: iNTENSiON s/n: 214547403613104583621042757fA2 or Name: shadow_DWRF s/n: 214547403613104583621042757fA2
Их надо разбить на 2 запроса. Я уже хз что придумать.

POS_troi
16.10.2009, 10:57
под вечер скинь в пм файлик с самыми тяжкими случаями (строк 10-20) - распарсим (я какраз недавно распарсивал бэкап мускуля так что есть наработки). мож что и выйдет.

Byte_
16.10.2009, 11:31
я вы предложил по шагам конструкция " or " - explode
у тебя ведь дамп, так? делаем примерно:

<?
$file = file_get_contents('dump.sql');
$file = explode("\r\n",$file);
$i = 0;
foreach($file as $f)//парсим конструкцию or
{
if(!(strpos($f,' or ')===false))
{
$f = explode(' or ',$f);
$file[] = $f['0'];$file[] = $f['1']; //тут ещё нужно приписать гачало и конец запросов
$file[$i] = '';
}
$i++;
}
foreach($file as $f)if($f != '')$res .= "\r\n".$f;
?>

приблизительно так.

зы: пару не стандартных строк, если не сложно скинь лучше сюда. задачка интересная - я бы тоже подумал.

GrAmOzEkA
16.10.2009, 13:15
Относительно стандартный запрос, которого большая часть в базе.
INSERT INTO `base_serials` VALUES (0,'5Xpence 3.9', 'Name: Registered User s/n: RJIVOFCIJIBV_DIJ', 'NULL', 'NULL');


Вот немного выбрал нестандартных запросов.
INSERT INTO `base_serials` VALUES (0,'Adobe Photoshop CS3 10.0', 'S/N: 1045-0415-8060-3241-4388-1406<br>Crack for PowerBook G4 below<br>Your posted removal only works with Intel Macs<br>Remove Activation for PowerBook G4<br>Left Click on Photoshop CS3 app<br>Go to Show Package Contents<br>Open Contents Folder<br>Open Resources<br>Open AMT<br>Rename the file called application.sif to application.xx<br>', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Actioneer 1.10', 's/n: xqpr-7kcf-j8lh', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Falch Net Developer Studio 2.5.1.6', 'Email: silf@fukk.org p/w: c7OEVNuY', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'quickoffice 51', 'Install Password: bach420 s/n: 36000000', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'007 Customer Search Expert 3.0', 'Name: EdeltraudFernandez Email: EdeltraudFernandez@snuttis.com s/n: bRIDqeMM ?`2#h_g[ 2g;dB4.Q', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'1st Go Warkanoid II: Total 2.75', 'FirstName: uknl0gik [RAiD] LastName: RAiD Email: RAiD@RAiDiSM.com s/n: 501A-9576', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'32bit Email Broadcaster 9.34.01', 'Name: Sponge Uk Email: SpongeUk@Home.Net s/n: 303737353B3C or Name: XSTATiQUE Email: XSTATiQUE@REFORM.COM s/n: 30363B34363A', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'3D Custom Screensaver 1.0.325', 'Name: TEAM LUCiD s/n: YG67T-11111-WCA0J KEY2: YG67T KEY1: 11111 KEY5: WCA0J', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'3d Fish! 2.65e', 'Name: aZZaZZeLLo [TSRh] Code: k35yg2dece7m5v2vugupfuy', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'4 in 1 Line 1.0', 's/n: LASH12-XOILXPEMW or s/n: 101728-EXFBFAGCJ', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'AbsoluteFTP 1.9.5', 'Name: Barbara Page Company: E.E. s/n: 02-19-025201 Key: 6119 8884 1832 7485 0176 Date: Never', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'AbsoluteFTP 1.9.6', 'Name: Lonnie S. Porter Company: s/n: 02-19-025884 LicenseKey: 0756 8446 9749 8142 3788 Expiration: Never', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Accessable Help Desk SE 1.0', 'Password: finesthour', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'AccountLogon 2.2', 'Email: Nemesis@tnt2001.com s/n: AA29EAED0CE9', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Al Morale's Game Show Presenter 1.51', 'RegKey: 1510314169350 Code: 55489', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Al Morale's Game Show Presenter 2.0', 'RegKey: 1510314169350 CustID s/n: 55489', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Atrex 9.02', 'Name: Justic Corp s/n:7337 Licensed Copies: 50 Reg.Key: 1A2F8514EA0F0691 Option Key: 7D78FAD3868ED762', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Auto-Master 5.17', 'Name: ubique.daemon [Koma] serial [privat]: 743675 serial [gesch.]: 738698', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'BlackICE Defender 2.9 Workstation', 'Key: 4189020-RS-A47B3', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Borland J Builder 6 Enterprise.Edition ', 's/n: 8UQG-SPX3VN-NSKA7M-MWAV AuthKey: 7AH-ET7 Licensestring: %EE%DA%CE%20%00%00%02%54%DF%DD%23%66%BD%83%DF%33%C D%02%1D%E0%D7%A1%14%C1%7E%28%A8%EA%C0%78%DE%77%3A% C3%B2%AB%58%92%02%14%81%8D%F4%0B%9C%27%79%90%DF%FE %7F%DF%23%7E%A7%F2%E0%39%A1%00%7B%81%AA%9C%1A%B0%5 F%28%CB%E8%EB%41%A1%66%4E%F9%99%D9%56%87%01%66%D8% 8E%FA%3C%FC%1D%3E%A4%BE%B5%0A%E7%0B%47%E3%AE%AF%5D %AA%5C%17%FD%EB%CA%76%B6%42%44%A6%AD%97%72%F6%20%1 C%85%96%D3%6C%E5%1B%42%88%EA%DB%5E%91%09%0E%84%88% FD%4C%E1%68%46%8C%88%B3%73%F6%00%51%EA%F4%B4%42%E0 %00%09%A2%F6%B1%46%A2%5B%0E%88%9F%FC%43%B4%2E%55%F 1%9B%9B%45%90%1E%54%A8%8B%B0%6F%A5%25%46%C6%E0%90% 04%99%2D%46%A2%DA%FB%19%9D%27%1C%C4%B9%C4%31%DF%62 %01%91%C4%91%40%DE%1E%3E%9B%F9%CD%47%95%15%74%B0%C 6%CE%64%8E%30%54%EA%BE%CC%09%D6%17%2D%D3%D0%C8%1F% ED%74%40%AE%F1%CC%6B%E2%5F%36%8C%AC%8D%52%C1%37%0B %8C%FC%D4%42%8F%44%01%ED%C9%C3%7C%EC%14%46%9C%F9%B 8%5A%F9%5C%17%C0%CC%B5%2A%F0%7F%7D%D4%8B%F9%48%CE% 11%1F%E7%D8%92%59%B9%25%2F%E0%89%FC%37%8B%71%55%C3 %B9%B3%6E%E7%55%5C%F7%B8%F0%53%B7%27%3F%A7%DB%DD%6 0%BE%4E%19%B2%8E%BE%57%D0%29%2F%84%EA%F6%6E%91%70% 0F%DB%E1%E1%2C%8E%19%2E%C8%EF%DC%0D%DA%4C%45%82%FE %F1%46%C0%6B%23%9E%D4%D4%13%D4%07%42%85%B1%D4%3D%D A%7E%1B%F6%CA%E4%4A%97%13%6D%E1%BE%C5%20%DF%1C%1A% E3%C1%F1%2D%C8%21%24%DF%E9%96%6C%F9%7D%64%F6%BC%E1 %75%B9%54%22%DE%FD%81%4F%9A%6C%39%D0%A2%A6%1D%8A%5 E%20%F2%D4%C0%4E%B0%15%73%FD%A3%84%7F%A5%23%1A%E6% 83%C6%0D%A0%45%58%C5%CE%E1%62%F4%19%63%FF%86%89%76 %EF%64%59%CD%8B%C2%32%ED%29%75%C7%C8%AD%58%F2%7F%0 C%C2%E9%CF%59%D3%42%38%E0%FC%92%4B%8E%39%52%C2%CD% D6%0D%9E%1E%35%88%8D%C5%7E%E2%40%42%A6%A2%91%73%D4 %1D%65%C4%EF%A1%4E%CF%02%42%E9%B5%EB%07%DC%39%13%C 7%E7%DD%52%AC%7A%18%F9%AC%DF%7C%C4%76%4D%A3%A5%DA% 07%80%06%7B%FF%81%F8%25%ED%07%34%CB%F9%D5%6B%A8%6E %21%C4%BF%E5%65%E7%48%76%9E%A9%AD%71%9E%3E%7F%A2%B 5%B8%23%F7%13%61%CA%91%F0%51%A1%0D%27%EE%CA%D9%56% D7%68%30%DC%95%94%67%B1%60%5E%EE%94%E6%3D%90%0D%04 %E2%F9%CC%1E', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Brains Breaker 3.1.02', 'Pack: Full Name: jioo ft. cb ID: supply@crazybytes.com s/n: N65F-HNX7-7HWF-VHWS', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Cabinet Manager 2001 3.x', 'Your Name: Royal Accezz Crew Cert No.: 1008993848 Lic No.: 3RE1497018133 or Your Name: A Valid Cabinet Manager User Cert No.: 1008994753 Lic No.: 3RE1497018599 or Your Name: A Valued Microlog Customer Cert No.: 1008994704 Lic No.: 3RE1497018437', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'Video Convert Split Merge Studio 6.8.2 Build 567', 'S/N: Name : Sezgin Mutlu<br>Organization: Turkey<br>Serial : VCSMS5947428<br>', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'PTravelAlarm 2.0505', 'S/N: S/N: 278-3965-1190<br>Active Key Enjoy<br>', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'MConvert 6.7', 'S/N: 91426773<br>works on all 6.x versions<br>', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'TimeOff 1.35', 'User name : DOUG DC-10<br>Organization : MP2k<br>Serial number: 149328400-26234884<br>', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'DeskCalc Tax Pro 3.3.0', '<b>Name:</b> .:Team ACME 2005:.<br><b>Company:</b> ACME Inc.<br><b>S/N:</b> CAL-V3-SSHZTYGOA', 'NULL', 'NULL');
INSERT INTO `base_serials` VALUES (0,'FairStars Audio Converter 1.47', '<b>Name:</b> TEAM ViRiLiTY<br><b>P/N:</b> N2168576<br><b>S/N:</b> 6F18-213B-393D-373D', 'NULL', 'NULL');

Byte_
16.10.2009, 13:42
S/N: 1045-0415-8060-3241-4388-1406<br>Crack for PowerBook G4 below<br>Your posted removal only works with Intel Macs<br>Remove Activation for PowerBook G4<br>Left Click on Photoshop CS3 app<br>Go to Show Package Contents<br>Open Contents Folder<br>Open Resources<br>Open AMT<br>Rename the file called application.sif to application.xx<br>
вот такие строчки всю картину портят(
так получается, что уникальные поля тут только название проги и вот этот нейм-серийник. надо для удобства парсинга всё грамотно разбить сначала.
я считаю, что удобнее всего будет для начала создать 2 тхт файла
1) - неймы
2) - серийники и прочая муть.
потом привести второй файл в конструкцию вида Name:xxxxxx,s/n:xxxxxxxxx,E_mail:xxxxx
и т.д.
проже будет если есть возможность пообщаться по icq или skype. Пиши в личку любой контакт.

GrAmOzEkA
17.10.2009, 17:58
Я думаю может с начало отделить информацию вида:
Name: ------- s/n: ----------
и записать её в файл, а все что останется записать в другой файл.
Есть у кого примерные скрипты или программы для этого ?

Gar|k
18.10.2009, 13:43
Поставь денвер, сделай дамп своей таблицы
создай на локальном эту таблицу и напиши небольшой php скрипт


$sql=mysql_query("select * from table");
while($row=mysql_fetch_assoc($sql)) {
echo "INSERT INTO 'base_serials' VALUES (".$row[.............)\n";
}


ВСЕ нужный дамп готов... остается только скопировать его в файл, создать на сервере таблицу нужного формата и mysql < dump.txt

вот замарачиваются с регурялками....

В цикле в этом можешь любую обработку данных впихнуть...

Так же можешь этот скрипт кинуть сразу на сервер... тогда вообще ниче не придеся выводить )) сразу будешь в базу записывать из одной таблицы в другую..

m0Hze
18.10.2009, 14:52
Поставь денвер, сделай дамп своей таблицы
создай на локальном эту таблицу и напиши небольшой php скрипт


$sql=mysql_query("select * from table");
while($row=mysql_fetch_assoc($sql)) {
echo "INSERT INTO 'base_serials' VALUES (".$row[.............)\n";
}


ВСЕ нужный дамп готов... остается только скопировать его в файл, создать на сервере таблицу нужного формата и mysql < dump.txt

вот замарачиваются с регурялками....

В цикле в этом можешь любую обработку данных впихнуть...

Так же можешь этот скрипт кинуть сразу на сервер... тогда вообще ниче не придеся выводить )) сразу будешь в базу записывать из одной таблицы в другую..
Тема должна называца: А я умею извращаца на php лучше чем ты, %username%!
Я прост в шоке над 90% предложений ":/

Gar|k
18.10.2009, 15:09
m0Hze, у меня просто были ситуации, когда нужно перенести информацию из совершенно другой структуры таблицы в новую (при апгрейде новой cms) и замарачиватся с дампами или шаманить над SQL запросами было ленивее чем накатать скрипт...

А ЧТО ПРЕДЛАГАЕШЬ ТЫ? :)

m0Hze
18.10.2009, 15:33
Предлогаю:
1)Сливаем дамп мускула.
2)Распарсиваем его регулярками из файла.
3)если в пункте 2,мы не добились полностью того чего хотели,то парсим результаты 2) еще раз
3) Вгоняем дамп в мускул.
Или-же, с помощью стандартных мускул-запросов,прямо в БД сделать нужные нам операции.

GrAmOzEkA
18.10.2009, 20:44
Пробовал распарсить, с начало избавился от всего html в базе, потом сделал чтобы выводились строки в которых есть Name: ------- s/n: ---------- Email: ----- и записывались в файл, а то что не удовлетворяет запросу записывалось во второй файл,
во втором файле вышло около 30% базы, короче я забил и не стал ипать мозг.
Сделал просто запись информации из soft и serial в переменные и скачивание файла txt c содержанием:

.......+--^----------,--------,-----,--------^-,
.......| ||||||||| `Serial--' | ...............O
.......`+----------------Base-------^----------|
...........`\_,---------,---------,------------'
.......... / XXXXXX /'|.........../'
........../ XXXXXX / `\........./'
........ / XXXXXX /.`-------'
......../ XXXXXX /
...... / XXXXXX /
......(________)
....... `------'
Serial Information:
$soft
$serial

$comment (информация об крякере)


З.Ы. Хотелось бы сделать, чтобы это записывалось в архив и скачивалось, но пока гуглю может есть что то подобное.
Содержимое архива:
serial.txt (содержимое файла выше)
.nfo (NFO)
myproject.url (ccылка на проект)
README.txt (прочая информация)

Gar|k
18.10.2009, 23:07
Насчет архива если сайт хостится на unix сервере комманды tar, bzip2 - ищи описание в нете... файлы скриптом создаешь в /tmp/{random}/ и system('tar ...'); архив готов.
можешь сохранять архивы чтобы патом не делать их заного просто копируя их в нужную папку и занося данные в таблицу....