一 將具體分析binlog中的常用event
二 Row格式事件核心
ROW_LOG_EVENT+TABLE_MAP_EVENT+GTID_EVENT
三 event生效機制
在binlog cache中生效,然后刷新紀錄寫入binlog中
四 具體event 內容
0 FORMAT_DESCRIPTION_EVENT
1 PREVIOUS_GTIDS_LOG_EVENT
2 GTID_LOG_EVENT
3 TABLE_MAP_EVENT
4 ROW_LOG_EVENT
5 QUERY_EVENT ()
6 XID_EVENT
7 ROTATE_EVNET
8 STOP_EVENT
五 詳解
0 FORMAT_DESCRIPTION_EVENT
在binlog文件開頭記載binlog相關的版本和其他一些信息
1 PREVIOUS_GTIDS_LOG_EVENT
記載之前所有binlog的GTID集合,作用是為了加快掃描速度
2 GTID_LOG_EVENT
記載關於GTID的相關信息,並且攜帶last commited和seq number 用來並行回放
3 QUERY_EVENT
在Row格式下只記錄DDL原始語句
4 TABLE_MAP_EVENT
用於描述表的內部ID和結構定義。
核心
table_id , table_name schema name length col count col type
實例
Table_map: `yzs`.`t1` TABLE_ID: '23'
5 ROW_LOG_EVENT
在Row格式下記錄了事物語句的具體內容
6 XID_EVENT
當事務提交時,不論是statement還是row格式的binlog都會添加一個XID_EVENT作為事務的結束。該事件記錄了該事務的ID。在mysql進行崩潰恢復時根據binlog中提交的情況來決定是否提交存儲引擎中prepared狀態的事務。
包含以下事件
WRITE_ROWS_EVENT,UPDATE_ROWS_EVENT, DELETE_ROWS_EVENT
7 ROTATE_EVENT
當binlog文件大小達到max_binlog_size參數設置的值或執行flush logs命令時,binlog發生切換,這時會在當前使用的binlog文件末尾添加一個ROTATE_EVENT事件,將下一個binlog文件的名稱和位置記錄到該事件中。
8 STOP_EVENT
當MySQL服務停止時,會在當前binlog文件尾添加一個STOP_EVENT事件表示數據庫的停止
六 總結
知道了這些事件的意義,我們可以根據這個對binlog展開多維度的統計
本文參考八怪大神的系列課程文章,