免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 3626 | 回复: 20
打印 上一主题 下一主题

[其他] shell 如何把解析日志,生成文件,统一导入mysql库 [复制链接]

论坛徽章:
3
程序设计版块每日发帖之星
日期:2016-02-27 06:20:00程序设计版块每日发帖之星
日期:2016-03-03 06:20:00数据库技术版块每日发帖之星
日期:2016-05-06 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-02-26 10:50 |只看该作者 |倒序浏览
日志sdc_02_17_2016(2).log:每个日志文件大概200M左右,日志行数10万行左右。
#Remark: DCS-p
#Software: WebTrends Data Collector         
#Version: 1.0
#Date: 2016-02-06 08:56:35
#Fields: date time c-ip  cs-uri-stem
2016-02-17 07:05:54 210.10.22.6  /NetCar/chehao.onclick agentId=&WT.cg_page=基本信息&WT.cg_onclick=测试号码
2016-02-17 07:05:54 21.13.33.6   /NetCar/chehao.onclick agentId=&WT.cg_page=基本信息&WT.cg_onclick=测试号码
2016-02-17 07:05:55 213.112.44.6 /NetCar/chehao.onclick agentId=&WT.cg_page=基本信息
2016-02-17 07:05:55 211.14.55.6   /NetCar/chehao.onclick agentId=&WT.cg_page=基本信息&WT.cg_onclick=测试
.....

通过shell程序,解析日志中数据,并插入mysql数据库,5万条数据大概插入1个小时,效率比较低,还需大家帮忙看下程序,如何能提高效率,非常感谢。

#!/bin/sh
a="sdc_02_17_2016(2).log"
HOSTNAME="10.22.0.17"
PORT="3306"
USERNAME="test"
PASSWORD="test"
DBNAME="dbtest"
TABLENAME="tabletest"

sed -i '/^#/d' $a

while read c1 c2 c3 c4
do
if [ "$c4" = "cs-uri-stem" ]; then
continue
fi

cg_page=$(echo $c4|grep -oP '(?<=WT.cg_page=)[^&]*')
cg_onclick=$(echo $c4|grep -oP '(?<=WT.cg_onclick=)[^&]*')

insert_sql="insert into ${TABLENAME}(dateid,times,ip,uristem,cg_page,cg_onclick,createdate) values('"$c1"','"$c2"','"$c3"','"$c4"','"$cg_page"','"$cg_onclick"',now())"

#每次打开链接,是不是很慢,听说load data infile很快,如何写?
mysql --default-character-set=utf8  -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e  "${insert_sql}"  

done <$a

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
2 [报告]
发表于 2016-02-26 11:08 |只看该作者
可以将日志处理成 txt 文件(格式对应MySQL的表结构), 然手使用 mysqlimport 工具进行导入

论坛徽章:
3
程序设计版块每日发帖之星
日期:2016-02-27 06:20:00程序设计版块每日发帖之星
日期:2016-03-03 06:20:00数据库技术版块每日发帖之星
日期:2016-05-06 06:20:00
3 [报告]
发表于 2016-02-26 11:13 |只看该作者
开始接触shell,能帮我写下吗,非常感谢。回复 2# reyleon


   

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
4 [报告]
发表于 2016-02-26 11:25 |只看该作者
回复 3# bzh_516


    这个表是不是只有  dateid,times,ip,uristem,cg_page,cg_onclick,createdate  这几个字段

论坛徽章:
3
程序设计版块每日发帖之星
日期:2016-02-27 06:20:00程序设计版块每日发帖之星
日期:2016-03-03 06:20:00数据库技术版块每日发帖之星
日期:2016-05-06 06:20:00
5 [报告]
发表于 2016-02-26 11:40 |只看该作者
还有其他的,我没有写全。不过插入这几个就可以了。回复 4# elu_ligao


   

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
6 [报告]
发表于 2016-02-26 12:30 |只看该作者
  1. #!/bin/sh
  2. a="aa.log"
  3. HOSTNAME="10.22.0.17"
  4. PORT="3306"
  5. USERNAME="test"
  6. PASSWORD="test"
  7. DBNAME="dbtest"
  8. TABLENAME="tabletest"

  9. sed -i '/^#/d' $a

  10. FILE="${TABLENAME}.sql"
  11. rm -f $FILE
  12. echo "insert into ${TABLENAME}(dateid,times,ip,uristem,cg_page,cg_onclick,createdate) values "> $FILE

  13. while read c1 c2 c3 c4
  14. do
  15. if [ "$c4" = "cs-uri-stem" ]; then
  16. continue
  17. fi

  18. cg_page=$(echo $c4|grep -oP '(?<=WT.cg_page=)[^&]*')
  19. cg_onclick=$(echo $c4|grep -oP '(?<=WT.cg_onclick=)[^&]*')

  20. echo "('"$c1"','"$c2"','"$c3"','"$c4"','"$cg_page"','"$cg_onclick"',now())," >> $FILE

  21. #每次打开链接,是不是很慢,听说load data infile很快,如何写?


  22. done <$a


  23. sed -i '$s/,$/;/' $FILE

  24. mysql --default-character-set=utf8  -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} <  "$FILE"
复制代码
先生成sql文件, 最后执行这个sql, 不知道这样符不符合

论坛徽章:
3
程序设计版块每日发帖之星
日期:2016-02-27 06:20:00程序设计版块每日发帖之星
日期:2016-03-03 06:20:00数据库技术版块每日发帖之星
日期:2016-05-06 06:20:00
7 [报告]
发表于 2016-02-26 13:49 |只看该作者
非常感谢您,已经能执行。但数据量少的时候,时间非常快,目前日志中都10万条记录,光生成文件都要半小时了,也是比较郁闷。不知道还能否再优化。非常谢谢您。回复 6# elu_ligao


   

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
8 [报告]
发表于 2016-02-26 14:01 |只看该作者
回复 7# bzh_516


    执行sql 的时间是多长, 如果执行sql 的时间能接收那就优化前面生成文件的代码, 如果执行sql 的时间也比较不能接收, 那就要用 LOAD DATA  的方法, 这个应该是要你的表结构的, 全字段的

论坛徽章:
3
程序设计版块每日发帖之星
日期:2016-02-27 06:20:00程序设计版块每日发帖之星
日期:2016-03-03 06:20:00数据库技术版块每日发帖之星
日期:2016-05-06 06:20:00
9 [报告]
发表于 2016-02-26 14:55 |只看该作者
数据量大时,生成文件执行了半小时时,报“ERROR 2013 (HY000) at line 1: Lost connection to MySQL server during query”错误。还没有验证插入语句呢。因为总共有5个这样的大文件,担心晚上定时跑时,执行不完。非常感谢您。回复 8# elu_ligao


   

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
10 [报告]
发表于 2016-02-26 15:06 |只看该作者
回复 9# bzh_516


    这个错误是 在实行mysql 语句的时候出现的吧, 网友提示在my.ini中 default-storage-engine=MYISAM

    生成文件那里, 你确认下原文件的特性---第五个字段是不是只有这两种情况:

    1、只有page 和 onclick
    2、只有page
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP