Создание БД из логов???

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

Создание БД из логов???

Непрочитанное сообщение Мишаня » 2009-03-10 23:24:39

Кто поможет, нужно создать БД и файла логов построчно с разделителем "пробел" ... можно ли такое сделать и как?
Зарание спасибо за ответ!

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.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/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35437
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Создание БД из логов???

Непрочитанное сообщение Alex Keda » 2009-03-10 23:35:44

а подробней
Убей их всех! Бог потом рассортирует...

ev
ст. лейтенант
Сообщения: 1325
Зарегистрирован: 2008-07-27 17:11:30
Откуда: Москва

Re: Создание БД из логов???

Непрочитанное сообщение ev » 2009-03-10 23:37:20

сделать можно - банально скриптом инсерт :)

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

Re: Создание БД из логов???

Непрочитанное сообщение Мишаня » 2009-03-10 23:42:17

Есть файл с логами не важно какой, например:

Код: Выделить всё

Дата Имя Фамилия Отчество Телефон ОтКудаЗаходил КогдаЗаходил .... и т.д
и вот это записать в некую БД с полями разделенными пробелами построчно ...

просто потом хочу с помошью PHP осушествлять поиск по определенным параметрам по этой БД в WEB интерфейсе ...

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

Re: Создание БД из логов???

Непрочитанное сообщение Мишаня » 2009-03-10 23:43:10

ev писал(а):сделать можно - банально скриптом инсерт :)
а поподробнее можно пожалуйста?

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

Re: Создание БД из логов???

Непрочитанное сообщение Мишаня » 2009-03-10 23:45:48

Мишаня писал(а):Есть файл с логами не важно какой, например:

Код: Выделить всё

Дата Имя Фамилия Отчество Телефон ОтКудаЗаходил КогдаЗаходил .... и т.д
и вот это записать в некую БД с полями разделенными пробелами построчно ...

просто потом хочу с помошью PHP осушествлять поиск по определенным параметрам по этой БД в WEB интерфейсе ...

а вообщето логи из posfix'a уточню ...

ev
ст. лейтенант
Сообщения: 1325
Зарегистрирован: 2008-07-27 17:11:30
Откуда: Москва

Re: Создание БД из логов???

Непрочитанное сообщение ev » 2009-03-11 0:31:52

если на пхп, то все относительно просто
1. читаем файл (построчно)
2. дальше делаем explode (чтобы разбить строку)
3. ну и делаем инсерт в базу с полученными данными

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35437
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Создание БД из логов???

Непрочитанное сообщение Alex Keda » 2009-03-11 0:42:44

лоад дата фром филе
Убей их всех! Бог потом рассортирует...

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Создание БД из логов???

Непрочитанное сообщение zg » 2009-03-11 6:21:58

http://dev.mysql.com/doc/refman/5.0/en/load-data.html

Код: Выделить всё

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,...]
TERMINATED BY - это признак конца поля, в твоём случае должен быть пробел

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

Re: Создание БД из логов???

Непрочитанное сообщение Мишаня » 2009-03-11 11:04:21

Спасибо, попробую отпишусь ..

Аватара пользователя
Hazzard
сержант
Сообщения: 265
Зарегистрирован: 2009-02-01 21:22:36
Откуда: Москва
Контактная информация:

Re: Создание БД из логов???

Непрочитанное сообщение Hazzard » 2009-03-12 17:02:23

ev писал(а):если на пхп, то все относительно просто
1. читаем файл (построчно)
2. дальше делаем explode (чтобы разбить строку)
3. ну и делаем инсерт в базу с полученными данными
причём скрипт можно будет засунуть в крон чтобы он автоматически парсил логи и забивал в базу :)
Debian, php/mysql и другой бред...

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

Re: Создание БД из логов???

Непрочитанное сообщение Мишаня » 2009-03-13 22:10:03

Так, отписываюсь как и обещал! :)
Попробывал пока что два способа:
1) Напрямую с Mysql
2) C помощью Perl сценария
Итак: Создал БД users с 5 полями (id, year, name, sname, phone). Поле ID - AUTO_INCREMENT. Записываю пробную запись в БД напрямую с Mysql:

Код: Выделить всё

1987 Misha Pypkin 2556677
поле id принемает значение 1;
потом пробую записывать в БД с помощью файла вида:

Код: Выделить всё

1988 Anton Sidorov 2449908
1989 Sasha Rostov 2324345
C помощью кода:

Код: Выделить всё

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 прицепить ...?

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Создание БД из логов???

Непрочитанное сообщение zg » 2009-03-13 22:53:44

Мишаня писал(а):Подскажите пожалуйста что может быть не так?
ну во-первых не надо логи в базе хранить, мускул этого не любит, а во-вторых не использовать пробел в качестве разделителя -)

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

Re: Создание БД из логов???

Непрочитанное сообщение Мишаня » 2009-03-13 22:55:03

ну а если у меня логи пробелами разделены? что тогда?

Аватара пользователя
Hazzard
сержант
Сообщения: 265
Зарегистрирован: 2009-02-01 21:22:36
Откуда: Москва
Контактная информация:

Re: Создание БД из логов???

Непрочитанное сообщение Hazzard » 2009-03-13 23:09:31

ev писал(а):если на пхп, то все относительно просто
1. читаем файл (построчно)
2. дальше делаем explode (чтобы разбить строку)
3. ну и делаем инсерт в базу с полученными данными
только прибавь к этому ещё
2.1 добавить одну пустую ячейку в запрос
Debian, php/mysql и другой бред...

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

Re: Создание БД из логов???

Непрочитанное сообщение Мишаня » 2009-03-13 23:10:42

А можно код в студию, а то так трудновато ориентироваться?

Аватара пользователя
Hazzard
сержант
Сообщения: 265
Зарегистрирован: 2009-02-01 21:22:36
Откуда: Москва
Контактная информация:

Re: Создание БД из логов???

Непрочитанное сообщение Hazzard » 2009-03-14 0:53:43

Hazzard писал(а):
ev писал(а):если на пхп, то все относительно просто
1. читаем файл (построчно)
2. дальше делаем explode (чтобы разбить строку)
3. ну и делаем инсерт в базу с полученными данными
причём скрипт можно будет засунуть в крон чтобы он автоматически парсил логи и забивал в базу :)
1) file();
2) explode();
3) mysql_***
http://www.php.net/manual/ru/
Debian, php/mysql и другой бред...

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: Создание БД из логов???

Непрочитанное сообщение ProFTP » 2009-03-14 2:01:58

поробуй так ,если не заработает скажи

Код: Выделить всё

#!/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

Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Создание БД из логов???

Непрочитанное сообщение zg » 2009-03-14 7:02:43

Мишаня писал(а):ну а если у меня логи пробелами разделены? что тогда?
zg писал(а):не надо логи в базе хранить
логи имеют первосходное свойство - они прекрасно хранятся в файлах :smile:

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

Re: Создание БД из логов???

Непрочитанное сообщение Мишаня » 2009-03-14 7:54:40

zg писал(а):
Мишаня писал(а):ну а если у меня логи пробелами разделены? что тогда?
zg писал(а):не надо логи в базе хранить
логи имеют первосходное свойство - они прекрасно хранятся в файлах :smile:
Мне нужно выборку и поиск осудкствлять

ev
ст. лейтенант
Сообщения: 1325
Зарегистрирован: 2008-07-27 17:11:30
Откуда: Москва

Re: Создание БД из логов???

Непрочитанное сообщение ev » 2009-03-14 8:46:29

Мне нужно выборку и поиск осудкствлять
grep :)

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Создание БД из логов???

Непрочитанное сообщение zg » 2009-03-14 9:00:35

Мишаня писал(а):Мне нужно выборку и поиск осудкствлять
греп или авк будут в данном случае делать выборку в сотни раз эффективней, хотя бы потому, что данные хранятся в разных файлах, а не в одном как в мускуле. То есть выборка будет идти по целевым данным, а не всем подряд.

Мишаня
мл. сержант
Сообщения: 119
Зарегистрирован: 2009-02-11 19:10:48

Re: Создание БД из логов???

Непрочитанное сообщение Мишаня » 2009-03-14 9:56:31

zg писал(а):
Мишаня писал(а):Мне нужно выборку и поиск осудкствлять
греп или авк будут в данном случае делать выборку в сотни раз эффективней, хотя бы потому, что данные хранятся в разных файлах, а не в одном как в мускуле. То есть выборка будет идти по целевым данным, а не всем подряд.
Да, вот именно поэтому я и хочу сделать потом веб интерфейс с поиском который будет заменять grep для обычного пользователя, что бы не давать ему определенных привилегий ...

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: Создание БД из логов???

Непрочитанное сообщение zg » 2009-03-14 11:57:54

Мишаня писал(а):который будет заменять grep для обычного пользователя
а что мешает парсить вывод грепа? конечно не так удобно как с мускулем, но в принципе тоже ничего сложного. В моей статистике так и сделано, никто не жаловался. К слову, логи за месяц весят пять-шесть гиг.

MAK
ст. сержант
Сообщения: 344
Зарегистрирован: 2008-09-17 2:23:21

Re: Создание БД из логов???

Непрочитанное сообщение MAK » 2009-03-14 23:43:40

Мишаня писал(а):1) Так как поиск идет по пробелу первая запись записывается в поле id, что совсем не нужно; (Исправляется установкой пробела в исходном файле в начале строки, но мне это не подходит т.к. логи все начинаются с символа);
Перемести поле id в конец таблицы. Или воще его убей.