mysql binlog開啓、解析成sql語句

       之前在測試環境的數據出問題了,但是Java程序的日誌沒有顯示修改的sql,我懷疑是有人直接修改了數據庫,導致出問題了,所以打算查看mysqlbinlog查看數據修改。後來發現是有人直接修改數據庫的數據,導致數據不一致的情況,問題也和測試說明了,bug-1。因爲現在關於mysqlbinlog讀取和解讀的博客太少了(我找了很久,最後才能看懂),所以總結一下,幫助一下大家。公司環境不太方便展示,所以這裏我用我自己的數據庫(mysql-5.7.31)來舉例。

       1. 是否開啓了binlog

          如果沒有開啓binlog,那麼接下來的一切都無從談起。在輸入行輸入

show variables like 'log_%'

         如果log_binON的話,說明日誌已經開啓log_bin_basename展示了binlog文件的基礎名字,也可以知道binlog文件的位置在/var/lib/mysql/data/logs/目錄下。如果沒有開啓,可以搜索一下如何開啓binlog日誌記錄。

 

       2. 查看binlog文件的位置

          運行 SHOW BINARY LOGS 查看binlog文件的位置。可以看到,現在數據庫的binlog已經記錄到000009了。打開服務器,查看一下目錄下的文件,發現目標文件mysql-bin.000009

 

       3. 輸出binlog文件

         在服務器上運行             

mysqlbinlog --start-datetime="2021-03-01 00:00:00" --stop-datetime="2021-06-21 23:59:59" /var/lib/mysql/data/logs/mysql-bin.000009 -r  /var/lib/mysql/data/logs/output.sql

         --start-datetime 日誌開始時間

         --stop-datetime 日誌結束時間

         /var/lib/mysql/data/logs/output.sql 日誌輸出位置

         下載output.sql文件到本地,查看output.sql文件。可以看到,在output文件中,已有sql信息了。

         不過這種情況是binlog紀錄爲statement的格式,binlog記錄的格式有多種:statementrowmixed。其中mixed其實是根據執行的語句,mysql自動選擇statementrow紀錄。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章