0

我和我的同事想通过 access.log 从 squid 服务器获取数据到另一个 Debian 服务器上的 mysql 服务器。

我们在互联网上找到了这类事情的指南,并制作了一个脚本,将数据从 access.log 文件中的字符串放入 mysql 中。但这似乎不起作用,插入的东西可能有问题,这里不知道。请帮助我们找出我们需要解决的问题。

这是一个脚本:

#!/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 方面并不是那么出色,虽然我知道大多数基本级别的运算符和函数,但我仍然无法弄清楚是什么使它无法正常工作。

4

3 回答 3

1

如果您的日志文件如下所示,

"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;

笔记:

  1. 假设日志文件是逗号分隔的,如果它的管道分隔,使用 FIELDS TERMINATED BY '|'。
  2. 另外,请注意@col1、@col2、.. 是如何用于存储日志文件的值的。
于 2013-08-27T18:55:01.663 回答
0

我在 mysql 中创建了所需的表。然后创建所需的字段。然后我使用文件导入并指出我的日志文件所在的位置。

也称为:要导入的文件

使用 LOAD DATA 导入文件的格式是 CSV 我能够指定文件分隔符以及字段。

成功加载了大约 160000 条记录的日志文件。

这是使用 XAMMP 控制面板完成的。

于 2018-07-04T16:33:18.880 回答
0

首先创建一个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-18T13:11:07.377 回答