zoukankan      html  css  js  c++  java
  • update没带where,寻找问题的思路

    数据库版本:5.6.16

    前几天,在测试环境中,不知道为什么突然之间,所有的一个字段值全部变成了12,需要将备份还原后开发重新清理垃圾数据并开始测试。

    在开发提供 SQL语句的情况下,能否查到是谁做了这个操作?  但是在binlog中能找到SQL,可以看到SQL执行的ID,但是在binlog中是不会记录连接的IP地址。

    MySQL的审计功能特别影响性能,或者是付费的MySQL版本。

    胡扯半天最重要的是解决此问题的一个思路吧,update不带where条件,一张表有500W+的数据量,那么SQL必属于慢SQL,通过binlog中找到的id,在慢查询去寻找,打开slow.log,确实找到了这条update不带where条件的SQL,
    同时也找到了连接的IP地址,是程序里的!!

    后来想起一个网友写的一个插件,即是审计功能,据说不影响性能,有待验证,只敢在测试环境中使用,生产没胆量,本人胆小,在此也跟大家分享一下吧,在测试环境可以玩玩。

    http://pan.baidu.com/s/1pLLarVl

    该插件可以测试使用,不影响数据库性能,
    线上数据库请测试环境测试完之后使用

    一、查找插件所在位置
    mysql> show variables like '%plugin_dir%';
    +---------------+------------------------------+
    | Variable_name | Value                        |
    +---------------+------------------------------+
    | plugin_dir    | /usr/local/mysql/lib/plugin/ |
    +---------------+------------------------------+
    1 row in set (0.00 sec)
    二、将audit_版本号.so插件下载后放到plugin_dir位置
        mv audit_版本号.so  audit.so
    三、加载插件
    install plugin audit  SONAME 'audit.so';
    四、卸载插件
    uninstall plugin audit;


    使用插件
    mysql> show variables like '%audit%';
    +----------------+----------------------+
    | Variable_name  | Value                |
    +----------------+----------------------+
    | audit_logfile  | /tmp/mysql_audit.log |
    | audit_myswitch | OFF                  |
    | audit_num      | 0                    |
    | audit_sql      | all_sql              |
    | audit_user     | all_user             |
    +----------------+----------------------+
    5 rows in set (0.01 sec)


    mysql> 
    mysql> set global audit_logfile='/tmp/mysql_audit_1.log';----只读变量,审计仅指定在/tmp/mysql_audit.log文件,保障权限可以写
    ERROR 1238 (HY000): Variable 'audit_logfile' is a read only variable


    set global audit_sql='update';   -----这些审计关键字用;分开
    set global audit_user='user2;user3';         ----审计用户用;隔开
    set global num =0;                          ----审计sql影响的最少行数(对delete无效)
    set global audit_myswitch=on|off|ON|OFF|1|0;       -----开启关闭审计

    查看日志linux下tailf /tmp/mysql_audit.log

    mysql5.6.tar.gz到mysql-5.7.8-rc.tar.gz是一个版本
    mysql5.7.9.tar.gz---mysql5.7.11.tar.gz是一个版本

  • 相关阅读:
    mysql 自定义排序
    arcgis 好人
    eclipse启动tomcat,提示三个端口均被占用
    oracle 查看表空间创建日期
    navacat 链接oracle oci invalid handle
    java +mysql 递归排序/* START WITH aa.parentid IN ( 10000, 20000, 30000, 40000, 50000, 60000, 70000 ) connect BY prior aa.id = aa.parentid ORDER siblings BY aa.id ASC*/ to
    Double 转 BigDecimal
    mysql 死锁 Waiting for stored function metadata lock
    Graphtree--zabbix增强功能(一屏展示所有内容)
    zabbix 分布式监控(proxy)源码安装
  • 原文地址:https://www.cnblogs.com/hankyoon/p/6089841.html
Copyright © 2011-2022 走看看