вставить строки данных из файла журнала в базу данных mysql

88
4

Я и мой работник хотели бы получить данные с сервера squid через access.log на сервер mysql на другом сервере Debian.

Мы нашли справочник по этому поводу в Интернете и создали сценарий, который поместит данные в mysql из строки в файл access.log. но это, похоже, не работает, что-то может быть с вставкой, неважно, здесь. Пожалуйста, помогите нам выяснить, что нам нужно, чтобы разобраться.

Вот сценарий:

#!/bin/bash

cp /www/logs/squid/access.log /tmp/squidforparse.log
>/www/logs/squid/access.log
awk '{print "INSERT INTO squid (ip,bytes,link,trans,time) \
VALUES(\""$3"\","$5",\""$7"\",\""$9"\",from_unixtime("$1"));"};' \
< /tmp/squidforparse.log | mysql -D traffics -u root --password=my_sql_passwd
rm -f /tmp/squidforparse.log

Я не очень хорошо разбираюсь в sql, хотя я знаю большинство операторов и функций на базовом уровне, но я не могу понять, что не делает его работу.

спросил(а) 2013-08-27T20:57:00+04:00 7 лет, 10 месяцев назад
1
Решение
98

Если ваш файл журнала выглядит ниже,

"apple","red",1230,"Newton","Physics","Da vinci code"
"iphone","black",44500,"Jobs","Mobiles","telephone booth"
"shoe","brown",9900,"Elizabeth","Fashion","shoe shop"

Моя структура таблицы выглядит ниже,

table_name = t1
columns = topic, price, department

то я бы что-то вроде ниже,

mysql -D traffics -u root --password=my_sql_passwd

LOAD DATA LOCAL INFILE 'file.log' INTO TABLE t1
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
(@col1,@col2,@col3,@col4,@col5,@col6) set topic=@col1,price=@col3,department=@col5;

Заметка:

Предполагая, что файл журнала разделен запятыми, если его граница ограничена, используйте FIELDS TERMINATED BY '|'. Также обратите внимание, как @col1, @col2,.. используются для хранения значений файла журнала.

ответил(а) 2013-08-27T21:55:00+04:00 7 лет, 10 месяцев назад
45

Сначала создайте тестовую программу Java. Затем закодируйте строку, используя пример файла загрузки, например,

'LOAD DATA LOCAL INFILE 'X:\\access.log' REPLACE INTO TABLE 'LogRecords'
FIELDS TERMINATED BY '|'
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'(
'startDate' ,
'IP' ,
'request' ,
'threshold' ,
'useragent'
)

'String me= "LOAD DATA LOCAL INFILE 'X:/access.log/' REPLACE INTO TABLE 'logrecords"+"'\n"+
"FIELDS TERMINATED BY \'|\'\n"+
"ENCLOSED BY \'\"\'\n"+
"ESCAPED BY \'\\\\\'\n"+
"LINES TERMINATED BY \'\\r\\n\'(\n"+
"'startDate' ,\n"+
"'IP' ,\n"+
"'request' ,\n"+
"'threshold' ,\n"+
"'useragent'\n"+
")";

System.out.println("" +me);

Скомпилируйте и исправьте свои ошибки. Запустите executeUpdate(me);

ответил(а) 2018-07-18T16:11:00+03:00 2 года, 11 месяцев назад
45

Я создал таблицу, необходимую в mysql. Затем создайте необходимые поля. Затем я использовал файл импорта и указал, где мой файл журнала.

В противном случае известен как: Файл для импорта

Если Формат импортированного файла был CSV с использованием LOAD DATA, я смог указать разделитель файлов, а также поля.


Файл журнала, содержащий около 160000 записей, был успешно загружен.

Это было выполнено с помощью панели управления XAMMP.

ответил(а) 2018-07-04T19:33:00+03:00 2 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема