zoukankan      html  css  js  c++  java
  • 腾讯云MySQL审计日志调用表账号分析

    最近公司核心库做表分析,大量系统连接这个核心库,而且从库好多10个从库,30几个账号,后来开通了全SQL审计,11个实例的审计日志条数每天超过4.5亿条+,

      问题

        1,怎么分析出这几百个表是哪些账号在用?

        2,这些表那些账号在读,哪些在写?

      方法:

        1,方法一

              手工下载csv文件,使用正则表达式,分析腾讯云导出这些审计日志csv文件 (分析很慢,而且不能把表对应具体的账号)  (此方法不行)

         2,使用JSqlParser这样对SQL语义分析,解析出SQL的表名

             手工下载csv文件,测试了一下,的确可以,有少量SQL无法解析,但是有4.5亿条,即使一条花费0.1秒,也要4千万秒分析完(超过1万小时),

     即使100个线程并发,也需要100小时,而且是一天的量 (此方法不行)

       是否有其他方法,能快速分析出SQL语句的表和账号关系。

       突然想起了,可以把csv导入到MySQL表中,在SQL字段建立全文索引,通过python来分析全文索引,获取表和账号的关系,测试了MySQL的表全文索引,的确很好用

     如查询表: ol_order ,如: lt_ol_order 表这个查询就不会查询处理,他查的是词,很好用。

      如查询表,insert的用户和表的分析,取一条sql样例:   

     SELECT count(*) num,user,'insert','ol_order',`sql`,date(`Timestamp`) dt FROM cc_0128 WHERE 
    MATCH(`sql`) AGAINST('+ol_order +insert' IN BOOLEAN MODE) group by user

     对于delete,select,update和replace都可以这样分析出来。写5条SQL,一起union all,就可以

       分析完后,分析有些异常数据:比如这样的语句: insert into 表 select 1,2  这样,如果再上面的语句加上 : `sql` like 'insert%' ,几百个表,5条SQL,查询比以前变慢很多!

        怎么办?分析效率和准确率如何平衡

          后来看了看,异常数据有些,但不多,可以针对异常数据的分析,以前的分析就不用改。修复的语句:     

    SELECT count(*) num,user,'insert','ol_order',`sql`,date(`Timestamp`)  FROM cc_0128 WHERE MATCH(`sql`)  
    AGAINST('+ol_order +insert' IN BOOLEAN MODE) and `sql` like 'insert%' group by user

     这样就可以分析出表,账号还用调用次数的关系。

        还能分析出表的字段被那些账号update更新。但几百个表。有1万多个字段,如果Python遍历,太低效,有没有更好的办法?

        根据分析的update和表的关系,其实几百个表有更新的只有2百多个,只需遍历这200多个表的分析就可以了,这样既解决效率问题。

        其实这个方法也可用,但是每次要下载csv文件,导表,建全文索引,再分析,太耗时间,后面把程序自动下载csv,通过filebeat导到ELK,在ELK直接查询,效率更高。

        额外收获:

           如某一时刻,MySQL的QPS高,如何快速查出QPS高的表,导出范围日志csv到表,简单查一下(一般百万级别)

             select tab,count(*) from (select id,substring_index(substring_index(LOWER(`sql`), 'where', 1),'from',-1) tab,`sql` from ol_sk1 ) t  GROUP BY tab order by 2 desc

           查询具体表的调用SQL:
            select `User`,count(*), `sql` from ol_sk1 where MATCH(`sql`) AGAINST ('ol_admin_config') GROUP BY `User`, `sql` order by 2 desc

     

  • 相关阅读:
    NYOJ 260
    NYOJ 271
    [转载]《博客园精华集》Winform筛选结果(共105篇)
    在DataGridView控件中加入ComboBox下拉列表框的实现
    给SQL补充一个查看表结构的存储过程
    编写自定义控件之下拉式属性
    PropertyGrid中的枚举显示为中文(转)
    DataGridView 中合并单元格
    树TreeView控件与DataTable交互添加节点(最高效的方法)
    通过键盘方向键控制TreeView节点的移动
  • 原文地址:https://www.cnblogs.com/zping/p/14480772.html
Copyright © 2011-2022 走看看