2013-08-27 93 views
0

我和我的同事希望通过access.log从鱿鱼服务器获取数据到另一台Debian服务器上的mysql服务器。从日志文件插入数据字符串到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真的很大,虽然我知道大部分的运算符和函数的基本级别的,我仍然无法弄清楚什么不使其工作。

+1

而不是构建SQL,为什么不使用['LOAD DATA INFILE'](http://dev.mysql.com/doc/refman/5.5/en/load-data.html)?它更宽容。 – tadman

+0

任何更新....?.. – beck03076

回答

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 [email protected],[email protected],[email protected]; 

注意:

  1. 假设日志文件是逗号分隔的,如果其管道分隔,则使用 FIELDS TERMINATED BY'|'。
  2. 此外,请注意如何使用@ col1,@ col2,..来存储日志文件的值 。
+0

任何更新....?.. – beck03076

+0

感谢您的答案家伙。日志文件看起来像这样。 –

+0

1369057101.497 20 192.168.0.174 TCP_DENIED/407 4046 GET http://babylon5.ru/ - HIER_NONE/- text/html 1369057101.654 91 192.168.0.174 TCP_DENIED/407 4291 GET http://babylon5.ru/ - HIER_NONE/- text/html 1369057105.705 4029 192.168.0.174 TCP_MISS/200 42463 GET http://babylon5.ru/ username.nn HIER_DIRECT/ip.189.197.111 text/html –

相关问题