2013-08-27 132 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 –

相關問題