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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 叮!給你尋找最優解的思路
- 尋找連結串列相交結點問題
- 如何透過六西格瑪尋找問題根源?
- 生產資料update沒加where條件(從執行到恢復)
- 合同審查自動化-智慧化尋找合同問題
- Laravel 集合 where 返回的資料格式問題Laravel
- 程式設計題:尋找木頭程式設計
- 在尋找新技術工作時詢問招聘人員的20個問題! - dev.todev
- 解決pod install update很慢的問題
- Laravel 多 where 並搜尋Laravel
- ubuntu18 沒有 where 命令 -bash: where: command not foundUbuntu
- 關於為前端連線資料庫出現問題答案的尋找(404)前端資料庫
- 關於浮動會錯亂的問題——轉換思維尋找替代方案
- Mybatis where 1=1 動態sql問題MyBatisSQL
- JVM 問題分析思路JVM
- 尋找真凶
- 一個思路,利用T檢驗去尋找量化交易CTA趨勢
- ORACLE sql merge into update where條件位置與效能消耗OracleSQL
- MySQL的where條件字串區分大小寫的問題MySql字串
- 排查問題的思路和清單
- 尋找有生命的行星
- 如何尋找網站安全公司來解決網站安全被入侵問題網站
- 資料問題排查思路
- 尋找邊境
- redis中大key問題的解決思路Redis
- 解決吞吐效能問題時的思路
- 尋找陣列的中心索引陣列索引
- 由select for update鎖等待問題引發的深入思考
- 解決Rust -- update crates.io過慢的問題Rust
- 從“股票問題”談動態規劃問題的解決思路動態規劃
- 伺服器問題 排查思路伺服器
- 關於搜尋地址的問題
- 08、 尋找周杰倫
- 162. 尋找峰值
- K-th 問題的一般思路
- Bigkey問題的解決思路與方式探索
- MySQL中SELECT+UPDATE併發更新問題MySql
- 茶葉直播帶貨在哪裡尋找貨源?志強茶超市
- Amazon面試題:尋找最長迴文子串面試題