使用mysqlbinlog查看MySQL二進制文件內容

一般都可以通過以下命令將二進制格式的binlog轉換爲方便查看的文本輸出。下面會詳細講解各個參數的作用。

mysqlbinlog  --no-defaults --base64-output=DECODE-ROWS -vv  binlog.000130

目錄

statement格式記錄的二進制日誌 

row格式的二進制日誌 

 

MySQL的二進制日誌由包含“ 事件 ”(event)的文件組成,這些 事件描述了對數據庫內容的修改。服務器以二進制格式寫入這些文件。要以文本格式顯示其內容,請使用 mysqlbinlog實用程序。你還可以使用 mysqlbinlog顯示覆制設置中從屬服務器寫入的中繼日誌文件的內容,因爲中繼日誌的格式與二進制日誌相同

statement格式記錄的二進制日誌 

mysqlbinlog mysql-bin.000021 

 在binlog的格式爲statement時,使用上面的命令查看二進制文件,會顯示出SQL語句,其他輸出的詳細說明如下。

 截取輸出中的一段進行說明

  • at 652 表示該時間的起始位置 或者 該時間 event在爲禁止文件中的偏移量 
  • 200508 21:55:22   該日期和時間指示該語句在事件執行(發生)的服務器上何時啓動。爲了進行復制,此時間戳會傳遞到從屬服務器。
  • server id 101   事件執行(發生)的服務器的值。
  • end_log_pos 652  指示下一個事件的開始位置(即,當前事件的結束位置+ 1)
  • Query 事件類型 
  • thread_id=3  指示哪個線程執行了事件
  • exec_time=0 是在主服務器上執行事件所花費的時間

複製延遲的指標 是如何計算的 On a slave, it is the difference of the end execution time on the slave minus the beginning execution time on the master. The difference serves as an indicator of how much replication lags behind the master

  • error_code=0  指示執行事件的結果。零表示沒有錯誤發生。
  • update t set user_name='yanhaihang' where id = 5 可以看到執行的SQL語句

row格式的二進制日誌 

二進制日誌格式爲row格式,binlog中會有row events,比如 Update_rows event

mysqlbinlog     mysql-bin.000022

 當使用上面的命令查看二進制日誌文件時,默認情況下 ,二進制日誌是以編碼爲base-64字符串的binlog語句顯示這些行事件,顯示如下(看不懂數據庫到底做了什麼 o(╥﹏╥)o)

 

mysqlbinlog   -v    mysql-bin.000022 

 加上參數 -v 或--verbose 可以 以註釋的僞SQL語句 去看這些行事件

 

 mysqlbinlog   -v -v   mysql-bin.000022

使用兩次 -v -v 或者 -vv 或者  --verbose --verbose可以額外顯示字段的類型以及字段的一些元數據信息。更加詳細了

 

 mysqlbinlog   -vv  --base64-output=DECODE-ROWS   mysql-bin.000022

加上--base64-output=DECODE-ROWS 選項後,行事件的binlog語句(那些看不懂的字符串)就不再顯示。(*^▽^*)

選項 --base64-output=DECODE-ROWS -v  組合成爲一個只看註釋的僞SQL便捷組合。

 

--base64-output=never 如果爲never 則遇到行事件報錯退出 

ERROR: --base64-output=never specified, but binlog contains a Update_rows event which must be printed in base64.

其他選項參數

--no-defaults  不會去讀取一些默認的配置文件,因爲讀取這些文件的時候使用mysqlbinlog會報錯。加上這個選項後可以避免讀取配置文件而報錯

--server-id=id 僅顯示該server_id的服務器創建的事件。你可以這麼理解!是一個過濾選項,只過濾出該server_id的時間。像--databas 一樣,只顯示該庫的時間

 

更多的選項參考官方文檔

https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog.html#option_mysqlbinlog_server-id

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