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

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)了固定部分和可變部分,后面我們會看到。

主站蜘蛛池模板: 无棣县| 游戏| 图木舒克市| 登封市| 萍乡市| 穆棱市| 舟山市| 延吉市| 克什克腾旗| 松原市| 高尔夫| 炎陵县| 洪泽县| 江油市| 榆社县| 灵山县| 大冶市| 武强县| 五莲县| 措美县| 宁津县| 军事| 内乡县| 泾阳县| 彰化县| 禹城市| 湘乡市| 通海县| 正镶白旗| 丹棱县| 扶风县| 平顺县| 青冈县| 贞丰县| 云梦县| 金昌市| 岳西县| 梁山县| 新乡市| 汝城县| 永平县|