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地址,是程式裡的!!
後來想起一個網友寫的一個外掛,即是審計功能,據說不影響效能,有待驗證,只敢在測試環境中使用,生產沒膽量,本人膽小,在此也跟大家分享一下吧,在測試環境可以玩玩。
該外掛可以測試使用,不影響資料庫效能,
線上資料庫請測試環境測試完之後使用
一、查詢外掛所在位置
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是一個版本
前幾天,在測試環境中,不知道為什麼突然之間,所有的一個欄位值全部變成了12,需要將備份還原後開發重新清理垃圾資料並開始測試。
在開發提供 SQL語句的情況下,能否查到是誰做了這個操作? 但是在binlog中能找到SQL,可以看到SQL執行的ID,但是在binlog中是不會記錄連線的IP地址。
MySQL的審計功能特別影響效能,或者是付費的MySQL版本。
胡扯半天最重要的是解決此問題的一個思路吧,update不帶where條件,一張表有500W+的資料量,那麼SQL必屬於慢SQL,透過binlog中找到的id,在慢查詢去尋找,開啟slow.log,確實找到了這條update不帶where條件的SQL,
同時也找到了連線的IP地址,是程式裡的!!
後來想起一個網友寫的一個外掛,即是審計功能,據說不影響效能,有待驗證,只敢在測試環境中使用,生產沒膽量,本人膽小,在此也跟大家分享一下吧,在測試環境可以玩玩。
該外掛可以測試使用,不影響資料庫效能,
線上資料庫請測試環境測試完之後使用
一、查詢外掛所在位置
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是一個版本
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28939273/viewspace-2128813/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 叮!給你尋找最優解的思路
- MERGE新特性(UPDATE WHERE,DELETE WHERE,INSERT WHERE)delete
- 解決WiFi問題找它準沒錯WiFi
- SQL Where in list 問題SQL
- 用ollyDbg尋找VB程式的註冊核心的一點思路
- update的機制問題
- 生產資料update沒加where條件(從執行到恢復)
- 合同審查自動化-智慧化尋找合同問題
- 尋找沒有使用繫結變數的sql語句變數SQL
- 程式設計題:尋找木頭程式設計
- 面試題:尋找熱門查詢面試題
- 【zz】面試題之尋找丟失的數字面試題
- 在尋找新技術工作時詢問招聘人員的20個問題! - dev.todev
- Hibernate 動態Update的問題
- Laravel 集合 where 返回的資料格式問題Laravel
- php資料庫之mysql(where、orderBy、Update)PHP資料庫MySql
- Laravel 多 where 並搜尋Laravel
- 一個思路,利用T檢驗去尋找量化交易CTA趨勢
- 關於浮動會錯亂的問題——轉換思維尋找替代方案
- bang 的論壇也沒徹底解決中文搜尋問題
- 無法執行的update問題解析
- JVM 問題分析思路JVM
- 尋找JAVA人材!Java
- Mybatis where 1=1 動態sql問題MyBatisSQL
- 如何尋找網站安全公司來解決網站安全被入侵問題網站
- 排查問題的思路和清單
- 尋找陣列的中心索引陣列索引
- 找尋不用Linux的理由Linux
- 解決pod install update很慢的問題
- Amazon面試題:尋找最長迴文子串面試題
- ubuntu18 沒有 where 命令 -bash: where: command not foundUbuntu
- 資料問題排查思路
- AIX問題解決思路AI
- ACM 尋找最大數ACM
- BUFFER CACHE尋找流程
- 尋找技術男
- 【Oracle】where條件執行順序(上篇的問題延伸)Oracle
- 解決吞吐效能問題時的思路