mysql的binlog大家都不陌生吧!
binlog是記錄所有數據庫表結構變更(例如CREATE、ALTER TABLE…)以及表數據修改(INSERT、UPDATE、DELETE…)的二進制日誌。
binlog不會記錄SELECT和SHOW這類操作,因為這類操作對數據本身並沒有修改,但你可以通過查詢通用日誌來查看MySQL執行過的所有語句。
二進制日誌包括兩類文件:二進制日誌索引文件(文件名後綴為.index)用於記錄所有的二進制文件,二進制日誌文件(文件名後綴為.00000*)記錄數據庫所有的DDL和DML(除了數據查詢語句)語句事件。
今天就給小夥伴們說一說我遇到的兩個問題,但是由於有binlog的存在,成功定位bug的事情
No1.突然有一天客戶反饋某用戶無緣無故自己積分修改錯亂,接到bug反饋,肯定是要看代碼的邏輯問題,然後仔細檢查一番之後並無發現有代碼邏輯問題,之後我們就想到了binlog日誌定位bug問題。
No2.某用戶錢包自己多了錢了(可以把負責這個業務的程序員拖出去祭天了)。查來查去還是沒有代碼的邏輯問題。binlog又可以幫上你的忙了!
接下來我就給大家闡述一下我們怎麼定位bug的:
(1)首先登陸進入mysql(默認root)
mysql -uroot -p密碼
之後執行
show variables like 'log_%';確認是否開啟bin_log,如果沒開啟(根據自己的業務判斷是否開啟)
![有時候binlog能就你一條命](http://p2.ttnews.xyz/loading.gif)
之後執行
show master logs;
查看所有的binlog日誌
![有時候binlog能就你一條命](http://p2.ttnews.xyz/loading.gif)
之後根據時間區間我們選擇性的截取我們想得到的執行sql記錄,最後執行:
/www/server/mysql/bin/mysqlbinlog -vv --start-datetime="2020-03-17 15:45:00" --stop-datetime="2020-03-17 19:00:00" --database=xx /www/server/data/mysql-bin.000005 >/root/xx.sql;
我們將binlog日誌寫入一個xx.sql的文件裡面,這樣方便我們查看
之後我們通過打開這個sql文件查看對應sql的語句,比如第一個問題,積分的問題,那麼我們可以根據用戶的id搜索update的語句進行定位,確認都執行了那些sql才導致的錯加積分。這樣我們就能很快的定位問題了!
閱讀更多 思夢PHP 的文章