2013-08-27 2 views
0

나와 내 동료는 다른 데비안 서버의 mysql 서버에 access.log를 통해 squid 서버에서 데이터를 가져오고 싶습니다.로그 파일의 데이터 문자열을 mysql 데이터베이스에 삽입

우리는 인터넷에서 그런 종류의 것들에 대한 안내를 발견했으며 access.log 파일의 문자열에서 mysql에 데이터를 넣을 스크립트를 만들었습니다. 그러나이 doesnt는 작동하고있는 것처럼 보인다, 무엇인가 삽입 물건 (여기의 어떤 생각이라도)과 있을지도 모른다. 우리가 정리해야 할 것을 찾아내는 데 도움을주십시오.

을 Heres 스크립트 :

#!/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/- 텍스트/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 –

관련 문제