- 深入理解MySQL主從原理
- 高鵬
- 541字
- 2021-04-16 16:29:26
2.1.4 Event header和Event footer
這兩部分在每個Event中都是一樣的,大小和格式都是固定的。下面解釋它們的含義。
1.Event header
timestamp:固定4字節(jié),是從新紀(jì)元時間(1970年1月1日0時0分0秒)以來的秒數(shù)。這個時間是命令發(fā)起的時間。如何定義命令發(fā)起呢?它是語句開始執(zhí)行的時間,源碼可以是在dispatch_command函數(shù)的開頭設(shè)置的(thd->set_time())。言外之意就是語法意義、權(quán)限檢查、優(yōu)化器生成執(zhí)行計劃的時間都包括在里面。還要注意這個時間在從庫計算Seconds_Behind_Master的時候是一個重要的依據(jù),這一點我們將在4.9節(jié)詳細(xì)介紹。
type code:固定1字節(jié),是Event的編碼。每個Event都有自己的編碼。
server_id:固定4字節(jié),就是生成這個Event數(shù)據(jù)庫的server_id。即便從庫端開啟了參數(shù)log_slave_updates,從庫將主庫的Event寫到自己的binary log中,這個server_id也依然是主庫的server_id,源碼有如下設(shè)置:

如果這個Event再次傳到主庫,那么需要跳過,不會寫入 relay log。源碼可以在Log_event::do_shall_skip(由queue_event函數(shù)調(diào)入)函數(shù)中找到跳過邏輯,如下。

event_len:固定4字節(jié),是整個Event的長度。
end_log_p:固定4字節(jié),是下一個Event的開始位置。
flags:固定2字節(jié),某些Event包含這個標(biāo)識,比如Format_description_log_event中的LOG_EVENT_BINLOG_IN_USE_F標(biāo)識說明本binary log是當(dāng)前正在寫入的。
2.Event footer
crc:固定4字節(jié),這部分就是整個Event的crc校驗碼,用于標(biāo)識Event的完整性。
如果要查看它們的完整定義可以參考源碼的Log_event_header類和Log_event_footer類。實際上在源碼中還將Event data部分更細(xì)致地分為header和body部分,對應(yīng)了固定部分和可變部分,后面我們會看到。
- Node.js+Webpack開發(fā)實戰(zhàn)
- Spring 5.0 Microservices(Second Edition)
- Java應(yīng)用與實戰(zhàn)
- Android項目開發(fā)入門教程
- PyTorch自然語言處理入門與實戰(zhàn)
- Mastering C# Concurrency
- TypeScript項目開發(fā)實戰(zhàn)
- 持續(xù)輕量級Java EE開發(fā):編寫可測試的代碼
- 代替VBA!用Python輕松實現(xiàn)Excel編程
- CodeIgniter Web Application Blueprints
- Python滲透測試編程技術(shù):方法與實踐(第2版)
- 前端架構(gòu)設(shè)計
- Clojure Data Structures and Algorithms Cookbook
- Getting Started with RethinkDB
- 系統(tǒng)分析師UML用例實戰(zhàn)