- 深入理解MySQL主從原理
- 高鵬
- 505字
- 2021-04-16 16:29:33
2.7.1 參數影響
這個參數一共有三種取值,除了官方文檔,筆者覺得源碼中的如下注釋也比較清晰,如表2-2所示。
表2-2

這里的read_set和write_set分別代表columns_before_image位圖和columns_after_image位圖。我們在解釋DML Event的時候多次提到,這里對應一下,如下。
INSERT語句:記錄變更的after_image(插入的數據),內部使用write_set過濾。
DELETE語句:記錄變更的before_image(刪除的數據),內部使用read_set過濾。
UPDATE語句:記錄變更的before_image和after_image(修改的數據),內部使用read_set和write_set過濾。
本節主要討論MINIMAL和FULL設置。對于上面源碼的說明進行如下解釋。
MINIMAL:對于before_image,只會記錄主鍵或者第一個非空的唯一鍵到Event。而對于after_image,只會記錄需要變更的字段,包括自增值。
FULL:對于前映像和后映像,都記錄全部字段。注意,不僅某些閃回工具依賴這種設置,記錄全部字段對于我們診斷問題、修復數據也有幫助。同時,設置為FULL可以讓從庫在選擇索引的時候有更多的選擇,提高從庫應用Event的效率。關于從庫數據的查找將會在4.6節詳細解釋。如果沒有對磁盤空間的要求,那么本參數最好設置為FULL。
注意,如果表中沒有主鍵也沒有非空的唯一鍵,那么即便是設置參數 binlog_row_image 為MINIMAL,before_image也會記錄全部的字段值。我們來看看THD::binlog_prepare_row_images函數中的源碼片段,如下。

如果table->s->primary_key < MAX_KEY條件不滿足,即沒有找到主鍵或者非空唯一鍵,則read_set不會改變,將保持記錄全字段。
- 現代C++編程:從入門到實踐
- Redis入門指南(第3版)
- Java Web及其框架技術
- Django:Web Development with Python
- 數據結構與算法分析(C++語言版)
- Mastering Akka
- 邊玩邊學Scratch3.0少兒趣味編程
- Web前端開發技術:HTML、CSS、JavaScript
- Java高并發編程詳解:深入理解并發核心庫
- 黑莓(BlackBerry)開發從入門到精通
- 計算機程序的構造和解釋(JavaScript版)
- Python數據可視化之matplotlib實踐
- C/C++程序設計教程
- Spring Boot 2+Thymeleaf企業應用實戰
- Neo4j權威指南 (圖數據庫技術叢書)