我和我的同事想通过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上并不是那么棒,虽然我确实知道基本级别的大多数操作符和函数,但我仍然无法弄清楚它们是不是很有效。
答案 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 :(得分: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);