• 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是一个版本

  • 相关阅读:
    AC 自动机
    [P4735] 最大异或和
    [HNOI2006] 最短母串问题
    [SHOI2002] 取石子游戏
    [NOI2014] 动物园
    [BZOJ2839] 集合计数
    【Spark】object not serializable (class: A)
    【Hbase】Master startup cannot progress, in holding-pattern until region onlined.
    Hbase 各个角色的工作。
    hbase region均衡机制
  • 原文地址:https://www.cnblogs.com/hankyoon/p/6089841.html
Copyright © 2020-2023  润新知