【问题标题】:insert data strings from log file to mysql database将数据字符串从日志文件插入 mysql 数据库
【发布时间】:2013-08-27 17:57:47
【问题描述】:

我和我的同事想通过 access.log 从 squid 服务器获取数据到另一个 Debian 服务器上的 mysql 服务器。

我们在互联网上找到了这类事情的指南,并制作了一个脚本,将数据从 access.log 文件中的字符串放入 mysql。但这似乎不起作用,插入的东西可能有问题,这里不知道。请帮助我们找出我们需要解决的问题。

这是一个脚本:

#!/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,虽然我知道大多数基本级别的运算符和函数,但我仍然不知道是什么使它无法工作。

【问题讨论】:

标签: mysql sql unix logging debian


【解决方案1】:

如果您的日志文件如下所示,

"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. 假设日志文件是逗号分隔的,如果它的管道分隔,使用 以“|”结尾的字段。
  2. 另外,请注意@col1、@col2、.. 是如何用于存储 日志文件。

【讨论】:

  • 谢谢大家的回答。日志文件如下所示。
  • 1369057101.497 20 192.168.0.174 TCP_DENIED/407 4046 GET babylon5.ru - HIER_NONE/- text/html 1369057101.654 91 192.168.0.174 TCP_DENIED/407 4291 GET babylon5.ru - HIER_NONE/- text/html 1369057105.705 4029 192.168.0.174 TCP_MISS/200 42463 GET babylon5.ru username.nn HIER_DIRECT/ip.189.197.111 text/html
  • 你能编辑你的答案并在那里粘贴 5 行日志文件吗?
  • 不知何故我发布的脚本今天起作用了。 LOAD DATA 提示也非常方便。感谢您的建议。干杯
【解决方案2】:

我在 mysql 中创建了所需的表。 然后创建所需的字段。 然后我使用文件导入并指向我的日志文件所在的位置。

也称为:要导入的文件

其中导入文件的格式是使用 LOAD DATA 的 CSV 我能够指定文件分隔符以及字段。

成功加载了大约 160000 条记录的日志文件。

这是使用 XAMMP 控制面板完成的。

【讨论】:

    【解决方案3】:

    首先创建一个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);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-09
      • 2013-01-28
      • 1970-01-01
      • 2016-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      相关资源
      最近更新 更多