- 深入理解MySQL主從原理
- 高鵬
- 652字
- 2021-04-16 16:29:31
2.5.2 DELETE_EVENT
1.DELETE_EVENT的作用
本Event是DELETE語句生成的Event,主要用于記錄DELETE語句的before_image實際數據,其中還包含table_id、映像位圖、字段數量、行數據位圖等信息。
2.源碼重要接口
主庫
· 初始化構造函數:Delete_rows_log_event::Delete_rows_log_event(THD* ,TABLE* ,const Table_id& table_id,bool is_transactional,const uchar* extra_row_info)。
· 數據寫入函數:Rows_log_event::do_add_row_data。
· 寫入binlog cache函數:Rows_log_event::write_data_header,Rows_log_event::write_data_body。
從庫
· 讀取構造函數:Delete_rows_log_event::Delete_rows_log_event(const char *buf,uint event_len,const Format_description_event *description_event)。
· 應用函數:Rows_log_event::do_apply_event。
3.主體格式
本Event的主體格式如圖2-8所示。
其中,固定部分如下。
table_id:6字節。
Reserved:2字節,保留以后使用。
可變部分如下。
var_header_len:當前2字節,通常為0x02 00。
columns_width:字段個數。
columns_before_image:before_image位圖,最少1字節。這里主要表示Event中是否需要記錄全部字段值,受到參數binlog_row_image影響,后面會單獨討論。這里需要記住,如果參數binlog_row_image被設置為FULL,則記錄為0xff。
row Bit-field:位圖,最少1字節。這個數據是行數據自身攜帶的,也就是構造Event的時候傳入的,每位代表一個字段。如果字段有實際數據則為0,否則為1。
row real data:實際行數據。這是自帶的,按照字段排序。

圖2-8
4.實例解析
我們進行如下操作。

使用解析語句如下。

結果如下。

解析如下。
7e 00 00 00 00 00:table_id,十六進制值7e,即十進制值126。
01 00:保留。
02 00:固定為0x02 00。
03:字段個數。
ff:columns_before_image,如果參數binlog_row_image設置為FULL,則固定為0xff。
f8:位圖,二進制值11111000,代表3列都有實際的數據。
01 00 00 00:實際數據為1。
07 67 61 6f 70 65 6e 67:0x07表示可變長度類型varchar的長度為7字節,67 61 6f 70 65 6e 67為gaopeng字符串的ASCII編碼。
03 00 00 00:實際數據為3。
這個解析過程和WRITE_EVENT的解析過程的區別在于Event header的type。如果將WRITE_EVENT的type改為 DELETE_EVENT,將DELETE_EVENT的type改為WRITE_EVENT,那么會發生什么呢?請大家思考一下。
- 軟件安全技術
- C語言程序設計習題解析與上機指導(第4版)
- Python機器學習:數據分析與評分卡建模(微課版)
- Pandas Cookbook
- PostgreSQL技術內幕:事務處理深度探索
- C語言程序設計實踐教程
- MATLAB實用教程
- C程序設計案例教程
- Hands-On Enterprise Automation with Python.
- Go語言從入門到精通
- Learning Jakarta Struts 1.2: a concise and practical tutorial
- Spring Boot從入門到實戰
- Python數據可視化之matplotlib實踐
- 一步一步學Spring Boot:微服務項目實戰(第2版)
- C/C++代碼調試的藝術