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

2.2.2 PREVIOUS_GTIDS_LOG_EVENT

1.PREVIOUS_GTIDS_LOG_EVENT的作用

這個Event只包含可變部分。通常作為binary log的第二個Event,用于描述前面所有binary log包含的GTID SET(包括已經(jīng)刪除的)。

前面我們說過,初始化GTID模塊的時候也會掃描binary log中的這個Event。在relay log中同樣包含這個Event,主要用于描述I/O線程接收過哪些GTID,后面我們能看到MySQL實例初始化的時候可能掃描relay log中的這個Event來確認Retrieved_Gtid_Set,在4.7節(jié)會進行詳細介紹。

2.源碼重要接口

主庫

· 初始化構造函數(shù):Previous_gtids_log_event::Previous_gtids_log_event(const Gtid_set *set);

· 寫入binlog cache:Previous_gtids_log_event::write(IO_CACHE* file)。

從庫

· 讀取構造函數(shù):Previous_gtids_log_event::Previous_gtids_log_event(const char *buf,uint event_len,const Format_description_event *description_event);

· 本Event始終會被跳過,不會被SQL線程應用:Previous_gtids_log_event::do_shall_skip(Relay_log_info *rli)。

3.主體格式

整個寫入過程集中在Gtid_set::encode函數(shù)中,因為GTID SET中可能出現(xiàn)多個server_uuid,并且可能出現(xiàn)GTID SET Interval,因此是可變的。在Gtid_set::encode函數(shù)中,我們也可以清晰地看到它在循環(huán)掃描GTID SET中的每個server_uuid和每個GTID SET Interval,如下。

圖2-3展示了這種結構。

圖2-3

以下為可變部分。

· number of sids:8字節(jié),小端顯示,本GITD SET中server_uuid的數(shù)量。

· server_uuid:16字節(jié),GTID SET中的server_uuid。

· n_intervals:8字節(jié),本server_uuid中GTID SET Interval的數(shù)量。

· inter_start:8字節(jié),每個GTID SET Interval起始的gno。

· inter_next:8字節(jié),每個GTID SET Interval結尾的下一個gno。

注意:由于一個GTID SET可以包含多個server_uuid,所以第2到第5部分可能包含多個。如果某個server_uuid中還包含多個GTID SET Interval,則第4和第5部分也可能包含多個GTID SET Interval(參見圖2-3)。

4.實例解析

下面是一個PREVIOUS_GTIDS_LOG_EVENT(mysqlbinlog--hexdump 輸出),是由筆者手動刪除auto.cnf后構造出來的。

從第二排開始解析如下。

02 00 00 00 00 00 00 00:包含2個server_uuid。小端顯示就是2。

24 98 54 63 a5 36 11 e8 a3 0c 52 54 00 81 38 e4:第一個server_uuid。

01 00 00 00 00 00 00 00:n_intervals表示本GTID SET Interval的數(shù)量。小端顯示就是1。

01 00 00 00 00 00 00 00:inter_start,第一個GTID SET Interval起始的gno為1。

08 00 00 00 00 00 00 00:inter_next,第一個GTID SET Interval結尾的下一個gno為8。

6c ea 48 f6 92 6c 11 e9 b1 cb 52 54 00 81 38 e4:第二個server_uuid。

01 00 00 00 00 00 00 00:n_intervals表示本GTID SET Interval的數(shù)量。小端顯示就是1。

01 00 00 00 00 00 00 00:inter_start,第一個GTID SET Interval起始的gno為1。

05 00 00 00 00 00 00 00:inter_next,第一個GTID SET Interval結尾的下一個gno為5。

解析結果如下。

24985463-a536-11e8-a30c-5254008138e4:1-7

6cea48f6-926c-11e9-b1cb-5254008138e4:1-4

可以看到它們是一致的,只是inter_next應該減去了1,因為Event中記錄的是GTID SET Interval結尾的下一個gno。

5.生成時機

一般在binary log切換的時候,PREVIOUS_GTIDS_LOG_EVENT 作為第二個 Event寫入binary log。

主站蜘蛛池模板: 温宿县| 贵州省| 延长县| 呼图壁县| 开平市| 黄骅市| 积石山| 会同县| 酉阳| 嘉义县| 鄄城县| 南部县| 库车县| 静海县| 南康市| 田东县| 东丽区| 连城县| 岳阳县| 腾冲县| 卢龙县| 台南市| 广平县| 彭水| 资阳市| 房山区| 宁陕县| 屏东市| 庆阳市| 镇宁| 呈贡县| 仁化县| 浮梁县| 延庆县| 恩施市| 如东县| 同心县| 新兴县| 普兰店市| 灯塔市| 元朗区|