首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL binlog Row 格式查看指南:使用 mysqlbinlog 解析 Row-based 日誌

     編輯:MySQL 綜合教學

MySQL binlog Row 格式查看指南

從 MySQL 5.1 開始,二進制日誌支援 Row-based 格式。預設情況下直接查看 binlog 只能看到經過 Base64 編碼的內容,難以直接閱讀具體的數據變更。本文介紹如何使用 mysqlbinlog 工具配合參數解析 Row 格式日誌,清晰呈現每一行數據的具體修改內容。

預設輸出示例

直接執行 mysqlbinlog mysql-bin.001912 時,輸出包含大量 Base64 編碼的 BINLOG 區塊,僅能看到表映射信息(如 Table_map: `test`.`test1` mapped to number 96991),無法得知具體的 INSERT/UPDATE/DELETE 詳情。

使用 -v 參數顯示註釋語句

從 MySQL 5.1.28 起,mysqlbinlog 新增 --verbose(或 -v)參數。加單個 -v 會生成帶註釋的 SQL 語句;加雙 -v -v 還會顯示字段類型、長度、是否為 NULL 等屬性信息。

mysqlbinlog -v -v mysql-bin.001912

輸出中會出現類似以下的可讀語句:

### INSERT INTO test.test1
### SET
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
### @2='3' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */

使用 --base64-output=DECODE-ROWS 移除 Base64 區塊

即使加了 -v,原始的 BINLOG Base64 區塊仍會輸出,干擾閱讀。加上 --base64-output=DECODE-ROWS 可僅保留解析後的 SQL 註釋,輸出更乾淨。

mysqlbinlog -v -v --base64-output=DECODE-ROWS mysql-bin.001912

此時輸出僅包含表映射、解析後的 SQL 及事務提交信息,適合直接分析或配合 grep 篩選特定表。

實用範例:按時間範圍篩選特定表操作

sudo mysqlbinlog -v -v --base64-output=DECODE-ROWS \
  --start-datetime="2014-08-09 10:42:36" \
  --stop-datetime="2014-08-10 10:42:36" \
  mysql-bin.000005 | grep -A 65 "employee"

此命令可在指定時間窗口內,提取涉及 employee 表的所有行變更記錄。

總結

  • -v -v:顯示詳細的行變更 SQL 及字段元數據。
  • --base64-output=DECODE-ROWS:抑制 Base64 輸出,僅保留可讀註釋。
  • 結合 --start-datetime/--stop-datetime 可精準定位時間段內的變更。

掌握這兩個參數,即可高效排查 Row 格式 binlog 中的數據變更詳情。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved