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是一个版本
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」