有時候binlog能就你一條命

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能就你一條命

之後執行

show master logs;

查看所有的binlog日誌

有時候binlog能就你一條命

之後根據時間區間我們選擇性的截取我們想得到的執行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才導致的錯加積分。這樣我們就能很快的定位問題了!


分享到:


相關文章: