将数据字符串从日志文件插入mysql数据库

时间:2013-08-27 17:57:48

标签: mysql sql unix logging debian

我和我的同事想通过access.log从squid服务器获取数据到另一个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上并不是那么棒,虽然我确实知道基本级别的大多数操作符和函数,但我仍然无法弄清楚它们是不是很有效。

3 个答案:

答案 0 :(得分:0)

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

"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. 假设日志文件以逗号分隔,如果其管道分隔,请使用 字段由'|'终止。
  2. 另外,请注意@ col1,@ col2,..是如何用来存储值的 日志文件。

答案 1 :(得分:0)

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

也称为:要导入的文件

其中使用LOAD DATA导入的文件的格式为CSV 我能够指定文件定界符以及字段。

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

这是通过XAMMP控制面板完成的。

答案 2 :(得分: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);