用ELK分析每天4亿多条腾讯云MySQL审计日志(4)--MySQL全文索引

      前言:

       该文章将会介绍以下:

          1,MySQL全文索引的使用

          2,全文索引停止词STOPWORD

          3,使用全文索引的高效和准确

      最近事情比较少,刚好可以梳理一下以前的工作,做一下总结!

      在以前的解决方案中有介绍百万级如何使用MySQL全文索引方法,在没使用ELK前,线上13个实例的SQL日志都是手工导入的MySQL的innodb表中,

 建立全文索引来分析的。

      分析的SQL如下:   布尔文本搜索(IN BOOLEAN MODE )

SELECT count(*) 调用次数,user 账号,'crm1' 实例,'tab' 表名,'select' 操作,`sql` 样例SQL FROM cc WHERE 
MATCH(`sql`) AGAINST('+tab +select' IN BOOLEAN MODE) group by user

   因为13个实例数据量超过4亿,将这13个日志分成多个表,  如果表行数特别大会报错,需要调整参数innodb_ft_cache_size到最大值。

   同时查询出的结果会有少量的错误:

     这里的操作是select语句,但实际是insert,因为insert语句里包含有:select这个关键字,也被统计到。但如果如下查询有:     

MATCH(`sql`) AGAINST('+tab +select -from -for' IN BOOLEAN MODE) 

     这里的: -from -for  是无法生效的,因为from和for属于全文索引STOPWORD:   

SELECT * FROM information_schema.INNODB_FT_DEFAULT_STOPWORD;

   

    如何解决这些少量的错误,想了一下,保持前缀的方式来判断,以前缀的操作为主:   

SELECT count(*) 调用次数,user 账号,'crm1' 实例,'tab' 表名,'select' 操作,`sql` 样例SQL FROM cc WHERE 
MATCH(`sql`) AGAINST('+tab +select' IN BOOLEAN MODE) and `sql` like concat('select','%') group by user

   该SQL的确能准确排除掉干扰,但是执行效率太慢了,以前几个小时能分析完的,使用该方法需要几十小时,一旦报错,又要几十小时,无法保证能分析完成

    有没有其他办法,即能准确又高效?

     想了想,既然2个都只满足其中一部分,不如2者结合起来使用, 怎么结合:

       方案1直接分析不变,分析完结果后,对结果表:ea_tj 再进行分析:      

select * from ea_tj where sqltext not like concat(op,'%') 

   查出这些异常的结果,对这些少量异常结果再进行:`sql` like concat('select','%')  分析:

    这样就解决 :准确和高效

     MySQL全文索引方法分析,比数据放到ELK再分析有巨大性能差距。

     相关文档:
        ELK查询和汇总
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值