Создание БД из логов???
Модератор: terminus
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- мл. сержант
- Сообщения: 119
- Зарегистрирован: 2009-02-11 19:10:48
Создание БД из логов???
Кто поможет, нужно создать БД и файла логов построчно с разделителем "пробел" ... можно ли такое сделать и как?
Зарание спасибо за ответ!
Зарание спасибо за ответ!
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
- Alex Keda
- стреляли...
- Сообщения: 35437
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
-
- ст. лейтенант
- Сообщения: 1325
- Зарегистрирован: 2008-07-27 17:11:30
- Откуда: Москва
Re: Создание БД из логов???
сделать можно - банально скриптом инсерт 

-
- мл. сержант
- Сообщения: 119
- Зарегистрирован: 2009-02-11 19:10:48
Re: Создание БД из логов???
Есть файл с логами не важно какой, например:
и вот это записать в некую БД с полями разделенными пробелами построчно ...
просто потом хочу с помошью PHP осушествлять поиск по определенным параметрам по этой БД в WEB интерфейсе ...
Код: Выделить всё
Дата Имя Фамилия Отчество Телефон ОтКудаЗаходил КогдаЗаходил .... и т.д
просто потом хочу с помошью PHP осушествлять поиск по определенным параметрам по этой БД в WEB интерфейсе ...
-
- мл. сержант
- Сообщения: 119
- Зарегистрирован: 2009-02-11 19:10:48
Re: Создание БД из логов???
а поподробнее можно пожалуйста?ev писал(а):сделать можно - банально скриптом инсерт
-
- мл. сержант
- Сообщения: 119
- Зарегистрирован: 2009-02-11 19:10:48
Re: Создание БД из логов???
Мишаня писал(а):Есть файл с логами не важно какой, например:и вот это записать в некую БД с полями разделенными пробелами построчно ...Код: Выделить всё
Дата Имя Фамилия Отчество Телефон ОтКудаЗаходил КогдаЗаходил .... и т.д
просто потом хочу с помошью PHP осушествлять поиск по определенным параметрам по этой БД в WEB интерфейсе ...
а вообщето логи из posfix'a уточню ...
-
- ст. лейтенант
- Сообщения: 1325
- Зарегистрирован: 2008-07-27 17:11:30
- Откуда: Москва
Re: Создание БД из логов???
если на пхп, то все относительно просто
1. читаем файл (построчно)
2. дальше делаем explode (чтобы разбить строку)
3. ну и делаем инсерт в базу с полученными данными
1. читаем файл (построчно)
2. дальше делаем explode (чтобы разбить строку)
3. ну и делаем инсерт в базу с полученными данными
- Alex Keda
- стреляли...
- Сообщения: 35437
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Создание БД из логов???
http://dev.mysql.com/doc/refman/5.0/en/load-data.html TERMINATED BY - это признак конца поля, в твоём случае должен быть пробел
Код: Выделить всё
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[CHARACTER SET charset_name]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char']
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET col_name = expr,...]
-
- мл. сержант
- Сообщения: 119
- Зарегистрирован: 2009-02-11 19:10:48
Re: Создание БД из логов???
Спасибо, попробую отпишусь ..
- Hazzard
- сержант
- Сообщения: 265
- Зарегистрирован: 2009-02-01 21:22:36
- Откуда: Москва
- Контактная информация:
Re: Создание БД из логов???
причём скрипт можно будет засунуть в крон чтобы он автоматически парсил логи и забивал в базуev писал(а):если на пхп, то все относительно просто
1. читаем файл (построчно)
2. дальше делаем explode (чтобы разбить строку)
3. ну и делаем инсерт в базу с полученными данными

Debian, php/mysql и другой бред...
-
- мл. сержант
- Сообщения: 119
- Зарегистрирован: 2009-02-11 19:10:48
Re: Создание БД из логов???
Так, отписываюсь как и обещал!
Попробывал пока что два способа:
1) Напрямую с Mysql
2) C помощью Perl сценария
Итак: Создал БД users с 5 полями (id, year, name, sname, phone). Поле ID - AUTO_INCREMENT. Записываю пробную запись в БД напрямую с Mysql: поле id принемает значение 1;
потом пробую записывать в БД с помощью файла вида: C помощью кода:
записываю столбики по пробелу, а строки по переходу на новую строку. Столкнулся с некоторыми трудностями:
1) Так как поиск идет по пробелу первая запись записывается в поле id, что совсем не нужно; (Исправляется установкой пробела в исходном файле в начале строки, но мне это не подходит т.к. логи все начинаются с символа);
2) При каждом обращении к такому коду идет запись в БД поллностью дублируя и страрые и новые записи, что тоже немыслимо, т.к. логи на 500000 строк а может и больше, и при добавлении хотя бы одной записи Сервер накроется нафиг
нужно что бы просто было обновление новых записей.
Теперь что косается Perl сценария: есть вот такой вот скрипт:
Выводит точное количество строк, но вот ничего не добавляет и просто пустует ...
Подскажите пожалуйста что может быть не так? Мне желательно скрипт использовать, что бы потом на Cron прицепить ...?

Попробывал пока что два способа:
1) Напрямую с Mysql
2) C помощью Perl сценария
Итак: Создал БД users с 5 полями (id, year, name, sname, phone). Поле ID - AUTO_INCREMENT. Записываю пробную запись в БД напрямую с Mysql:
Код: Выделить всё
1987 Misha Pypkin 2556677
потом пробую записывать в БД с помощью файла вида:
Код: Выделить всё
1988 Anton Sidorov 2449908
1989 Sasha Rostov 2324345
Код: Выделить всё
LOAD DATA INFILE "/usr/home/user/users" INTO TABLE users fields terminated by ' ' lines terminated by '\n';
1) Так как поиск идет по пробелу первая запись записывается в поле id, что совсем не нужно; (Исправляется установкой пробела в исходном файле в начале строки, но мне это не подходит т.к. логи все начинаются с символа);
2) При каждом обращении к такому коду идет запись в БД поллностью дублируя и страрые и новые записи, что тоже немыслимо, т.к. логи на 500000 строк а может и больше, и при добавлении хотя бы одной записи Сервер накроется нафиг

Теперь что косается Perl сценария: есть вот такой вот скрипт:
Код: Выделить всё
#!/usr/local/bin/perl
use Mysql;
$dbh = Mysql->connect(undef,"users","anonymous","");
$filepath = "/usr/home/user/users.txt";
opendir (DIR, "$filepath");
@userfiles = sort readdir (DIR);
closedir(DIR);
foreach $file (@userfiles)
{
open(USER,"$filepath/$file");
@userdata = <USER>;
chomp ($_) foreach (@userdata);
close (USER);
$inserth = $dbh->query("INSERT INTO users(year,name,sname,phone) VALUES ('$userdata[0]','$userdata[1]','$userdata[2]','$userdata[3]')");
$num++;
}
print "'$userdata[0]' \n";
$counth = $dbh->query("SELECT ID FROM users");
$count = $counth->numrows;
print "В таблице $count пользователей, $num из которых только что было добавленно. \n\n";
Подскажите пожалуйста что может быть не так? Мне желательно скрипт использовать, что бы потом на Cron прицепить ...?
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Создание БД из логов???
ну во-первых не надо логи в базе хранить, мускул этого не любит, а во-вторых не использовать пробел в качестве разделителя -)Мишаня писал(а):Подскажите пожалуйста что может быть не так?
-
- мл. сержант
- Сообщения: 119
- Зарегистрирован: 2009-02-11 19:10:48
Re: Создание БД из логов???
ну а если у меня логи пробелами разделены? что тогда?
- Hazzard
- сержант
- Сообщения: 265
- Зарегистрирован: 2009-02-01 21:22:36
- Откуда: Москва
- Контактная информация:
Re: Создание БД из логов???
только прибавь к этому ещёev писал(а):если на пхп, то все относительно просто
1. читаем файл (построчно)
2. дальше делаем explode (чтобы разбить строку)
3. ну и делаем инсерт в базу с полученными данными
2.1 добавить одну пустую ячейку в запрос
Debian, php/mysql и другой бред...
-
- мл. сержант
- Сообщения: 119
- Зарегистрирован: 2009-02-11 19:10:48
Re: Создание БД из логов???
А можно код в студию, а то так трудновато ориентироваться?
- Hazzard
- сержант
- Сообщения: 265
- Зарегистрирован: 2009-02-01 21:22:36
- Откуда: Москва
- Контактная информация:
Re: Создание БД из логов???
1) file();Hazzard писал(а):причём скрипт можно будет засунуть в крон чтобы он автоматически парсил логи и забивал в базуev писал(а):если на пхп, то все относительно просто
1. читаем файл (построчно)
2. дальше делаем explode (чтобы разбить строку)
3. ну и делаем инсерт в базу с полученными данными
2) explode();
3) mysql_***
http://www.php.net/manual/ru/
Debian, php/mysql и другой бред...
- ProFTP
- подполковник
- Сообщения: 3388
- Зарегистрирован: 2008-04-13 1:50:04
- Откуда: %&й
- Контактная информация:
Re: Создание БД из логов???
поробуй так ,если не заработает скажи
вот еще я писал для логов постфикса
он смотрит если ли новые логи и записывет новые логи в БД...
Код: Выделить всё
#!/usr/bin/perl
use DBI;
$db_type = 'mysql';
$db_host = ''localhost;
$db_name = '';
$db_user = '';
$db_pass = '';
$dbh = DBI->connect("DBI:$db_type:database=$db_name;host=$db_host", $db_user, $db_pass, {RaiseError => 1, PrintError => 1 } ) || die $DBI::errstr;
$filepath = "/usr/home/user/users.txt";
opendir (DIR, "$filepath");
@userfiles = sort readdir (DIR);
closedir(DIR);
foreach $file (@userfiles)
{
open(USER,"$filepath/$file");
@userdata = <USER>;
chomp ($_) foreach (@userdata);
close (USER);
$dbh = do(
qq{ INSERT INTO users(year,name,sname,phone)
VALUES (?,?,?,?)
}, undef, $userdata[0], $userdata[1], $userdata[2],$userdata[3] );
$num++;
}
print "'$userdata[0]' \n";
$counth = $dbh->selectrow_arrayref(qq{SELECT COUNT(*) FROM users }, undef );
print "В таблице $counth->[0] пользователей, $num из которых только что было добавленно. \n\n";
вот еще я писал для логов постфикса
он смотрит если ли новые логи и записывет новые логи в БД...
Код: Выделить всё
#!/usr/bin/perl
use DBI;
use Fcntl ':flock';
my $log = '/var/log/maillog';
open LOG, '<', $log or die "Can't open $log: $!\n";
flock(LOG,LOCK_EX);
my $pos = 0;
$pos = do {chomp; $_} while <DATA>;
seek LOG, $pos, 0 if $pos <= -s $log;
$dbh = DBI->connect("DBI:mysql:host=localhost;database=db","login","pass")
or die "Нет доступа к СУБД!";
$insert = "INSERT INTO maillog (data,text) VALUES(?,?)";
$sth = $dbh->prepare("$insert");
while ($line = <LOG>)
{
my ($month, $day, $time, $hostname, $servicename) = split / /, $line, 5;
$timedata="$month $day $time";
$text = "$hostname $servicename";
$sth->execute($timedata,$text);
}
$sth->finish;
$dbh->disconnect;
$pos = tell LOG;
flock(LOG,LOCK_UN);
close LOG;
exec qw(perl -0777 -i -pe), 's/$/\n'.$pos.'/', $0;
__DATA__
0
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Создание БД из логов???
Мишаня писал(а):ну а если у меня логи пробелами разделены? что тогда?
логи имеют первосходное свойство - они прекрасно хранятся в файлахzg писал(а):не надо логи в базе хранить

-
- мл. сержант
- Сообщения: 119
- Зарегистрирован: 2009-02-11 19:10:48
Re: Создание БД из логов???
Мне нужно выборку и поиск осудкствлятьzg писал(а):Мишаня писал(а):ну а если у меня логи пробелами разделены? что тогда?логи имеют первосходное свойство - они прекрасно хранятся в файлахzg писал(а):не надо логи в базе хранить
-
- ст. лейтенант
- Сообщения: 1325
- Зарегистрирован: 2008-07-27 17:11:30
- Откуда: Москва
Re: Создание БД из логов???
grepМне нужно выборку и поиск осудкствлять

-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Создание БД из логов???
греп или авк будут в данном случае делать выборку в сотни раз эффективней, хотя бы потому, что данные хранятся в разных файлах, а не в одном как в мускуле. То есть выборка будет идти по целевым данным, а не всем подряд.Мишаня писал(а):Мне нужно выборку и поиск осудкствлять
-
- мл. сержант
- Сообщения: 119
- Зарегистрирован: 2009-02-11 19:10:48
Re: Создание БД из логов???
Да, вот именно поэтому я и хочу сделать потом веб интерфейс с поиском который будет заменять grep для обычного пользователя, что бы не давать ему определенных привилегий ...zg писал(а):греп или авк будут в данном случае делать выборку в сотни раз эффективней, хотя бы потому, что данные хранятся в разных файлах, а не в одном как в мускуле. То есть выборка будет идти по целевым данным, а не всем подряд.Мишаня писал(а):Мне нужно выборку и поиск осудкствлять
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Создание БД из логов???
а что мешает парсить вывод грепа? конечно не так удобно как с мускулем, но в принципе тоже ничего сложного. В моей статистике так и сделано, никто не жаловался. К слову, логи за месяц весят пять-шесть гиг.Мишаня писал(а):который будет заменять grep для обычного пользователя
-
- ст. сержант
- Сообщения: 344
- Зарегистрирован: 2008-09-17 2:23:21
Re: Создание БД из логов???
Перемести поле id в конец таблицы. Или воще его убей.Мишаня писал(а):1) Так как поиск идет по пробелу первая запись записывается в поле id, что совсем не нужно; (Исправляется установкой пробела в исходном файле в начале строки, но мне это не подходит т.к. логи все начинаются с символа);