mysql - 将日志文件中的数据字符串插入mysql数据库

标签 mysql sql unix logging debian

我和我的同事想通过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 并不是那么擅长,尽管我确实了解基础级别的大多数运算符和函数,但我仍然无法弄清楚是什么让它无法工作。

最佳答案

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

"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、.. 来存储以下值 日志文件。

关于mysql - 将日志文件中的数据字符串插入mysql数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18472446/

相关文章:

sql - 我如何在 where 子句中使用 If Else

linux - 目录上次修改日期

regex - unix/linux 上的 grep : how to replace or capture text?

c - 如何使用 lockf() 解锁?

php - 为什么我的代码只从数据库返回一行?

php - Laravel: SQLSTATE HY000 2002 由于目标机器主动拒绝,无法建立连接

mysql - 需要帮助理解 COUNT 和 <> 运算符(Hackerrank SQL 挑战问题)

php - SQL 相关子查询 - MAX 所需的帮助

sql - 将此 SQL 转换为 jOOQ

sql - 重建索引会使我的生产数据库停止工作吗?