2013-08-27 4 views
0

Mon collègue et moi aimerions récupérer les données du serveur squid via access.log au serveur mysql sur un autre serveur Debian.insérer des chaînes de données du fichier journal à la base de données mysql

Nous avons trouvé une sorte de guide pour ce genre de choses sur Internet et avons créé un script qui mettra les données dans mysql à partir d'une chaîne dans le fichier access.log. mais cela ne semble pas fonctionner, quelque chose pourrait être avec la chose d'insertion, aucune idée ici. Aidez-nous s'il vous plaît à trouver ce que nous devons trier.

Heres un script:

#!/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 

Je ne suis pas vraiment grand à sql, si je connais la plupart des opérateurs et des fonctions au niveau de base, encore je ne peux pas comprendre ce qui est pas le faire fonctionner .

+1

Au lieu de construire SQL, pourquoi ne pas simplement utiliser [ 'CHARGE INFILE' DATA] (http://dev.mysql.com/doc/refman/5.5/en/load-data.html)? C'est beaucoup plus indulgent. – tadman

+0

Toutes les mises à jour ....? .. – beck03076

Répondre

0

Si votre fichier journal ressemble ci-dessous,

"apple","red",1230,"Newton","Physics","Da vinci code" 
"iphone","black",44500,"Jobs","Mobiles","telephone booth" 
"shoe","brown",9900,"Elizabeth","Fashion","shoe shop" 

Ma structure de table ressemble ci-dessous,

table_name = t1 
columns = topic, price, department 

alors je voudrais quelque chose comme ci-dessous,

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

Note:

  1. En supposant que le fichier journal est séparé par des virgules, si son canal est délimité, utilisez FIELDS TERMINATED BY '|'.
  2. Notez également comment @ col1, @ col2, .. sont utilisés pour stocker les valeurs de le fichier journal.
+0

Toutes les mises à jour ....? .. – beck03076

+0

Merci pour les réponses les gars. Le fichier journal ressemble à ceci. –

+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/ nom d'utilisateur.nn HIER_DIRECT/ip.189.197.111 text/html –

Questions connexes