官术网_书友最值得收藏!

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節詳細解釋。

主站蜘蛛池模板: 阜康市| 楚雄市| 衡东县| 新巴尔虎右旗| 台东县| 古蔺县| 兴宁市| 丹棱县| 广东省| 登封市| 嘉义县| 万盛区| 紫金县| 金秀| 西宁市| 凤山县| 临湘市| 福鼎市| 门源| 新干县| 肇源县| 宁蒗| 遵义市| 班戈县| 长宁区| 墨竹工卡县| 邵武市| 河东区| 漳州市| 贡嘎县| 阜新市| 中牟县| 北流市| 凯里市| 花莲市| 玉龙| 达州市| 阜康市| 灵石县| 梅河口市| 雅江县|