- 深入理解MySQL主從原理
- 高鵬
- 532字
- 2021-04-16 16:29:33
2.7.3 DML Event中的標識
前文提到過,每個DML Event都包含columns_after_image/columns_before_image位圖。但只是簡單地說,對于FULL設置始終是0Xff。這里我們就知道了,如果本參數不設置為FULL,那么read_set和write_set最終會分別寫入columns_before_image和columns_after_image。
這里以DELETE語句為例進行比較。
建表語句和數據如下。


執行如下語句。

使用mysqlbinlog解析,如下。

下面是語句生成的DELETE_EVENT。

關鍵部分解析。
ff:binlog_row_image為FULL,就是記錄十六進制值ff。
f8:十六進制值f8轉換為二進制值為11111000,參考2.5節。
01 00 00 00:實際數據的第一個字段為數字1。
0a 00 00 00:實際數據的第二個字段為數字10。
07 67 61 6f 70 65 6e 67:實際數據字符串gaopeng的ASCII碼。
修改參數binlog_row_image為MINIMAL,執行語句如下。

使用mysqlbinlog解析如下。

下面是DELETE_EVENT:

關鍵部分解析。
02:十六進制值02,即二進制值00000010,這里是位圖的表示方式。說明第二個字段是需要記錄到Event的。
fe:十六進制值fe,即二進制值11111110,參考2.5節。
14 00 00 00:實際的數據,十六進制值14,即十進制值20。
我們清楚地看到before_image值記錄非空唯一鍵的值。如果從庫本表的結構和主庫不同,不包含主鍵和非空唯一鍵,只有一個a列上的索引,那么由于主庫參數binlog_row_image被設置為MINIMAL,這個索引是用不到的,將會引起全表掃描。這是因為a列的值根本就不會在Event中記錄。但是如果參數binlog_row_image被設置為FULL,那么a列上的索引是可以使用的,這是因為Event中記錄了全部字段的值。關于從庫數據的查找將會在4.6節詳細解釋。
- Learn ECMAScript(Second Edition)
- C++程序設計(第3版)
- MATLAB圖像處理超級學習手冊
- 區塊鏈架構與實現:Cosmos詳解
- Python從菜鳥到高手(第2版)
- Kotlin Standard Library Cookbook
- Mastering Python Networking
- 基于Swift語言的iOS App 商業實戰教程
- 深入淺出RxJS
- Java:High-Performance Apps with Java 9
- Mastering ROS for Robotics Programming
- Python機器學習算法與應用
- Visual Basic程序設計(第三版)
- IoT Projects with Bluetooth Low Energy
- Mastering SciPy