binlog event解析

學習看一個gtid模式的binlog

配置文件


[mysqld]

####: for binlog
binlog_format                       =row                          #     row
binlog_error_action                 =abort_server          # abort_server
log_bin                             =D:\\tools\mysql_5.7.36\\mysql-5.7.36-winx64\\binlog\\mysql-bin                      #  off
binlog_rows_query_log_events        =on                             #   off
log_slave_updates                   =on                             #   off
expire_logs_days = 2
binlog_cache_size                   =65536                          #   65536(64k)
binlog_checksum                     =CRC32                           #  CRC32
sync_binlog                         =1                              #   1
slave_preserve_commit_order         =ON                             #  OFF 
server_id                           =297      

gtid_executed_compression_period    =1000                          #    1000
gtid_mode                           =on                            #    off
enforce_gtid_consistency            =on                            #    off

binlog_rows_query_log_events        =on         

執(zhí)行SQL如下

mysql> begin;select now();
Query OK, 0 rows affected (0.00 sec)

+---------------------+
| now()               |
+---------------------+
| 2022-03-10 09:39:29 |
+---------------------+
1 row in set (0.00 sec)

mysql> insert into test values(10,'test');select now();
Query OK, 1 row affected (0.02 sec)

+---------------------+
| now()               |
+---------------------+
| 2022-03-10 09:39:50 |
+---------------------+
1 row in set (0.00 sec)

mysql> commit;select now();
Query OK, 0 rows affected (0.00 sec)

+---------------------+
| now()               |
+---------------------+
| 2022-03-10 09:40:43 |
+---------------------+
1 row in set (0.00 sec)

mysql>

binlog記錄信息

mysqlbinlog -vv xxxx-000001 通過這個命令來查詢binlog信息
以下解釋在binlog里面?zhèn)渥ⅰ?/p>

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#220310  9:36:30 server id 297  end_log_pos 123 CRC32 0xf295b2a8        Start: binlog v 4, server v 5.7.36-log created 220310  9:36:30 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
HlYpYg8pAQAAdwAAAHsAAAABAAQANS43LjM2LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAeViliEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AaiylfI=
'/*!*/;
# at 123
#220310  9:36:30 server id 297  end_log_pos 194 CRC32 0x28c16622        Previous-GTIDs
# 9bb60b7a-9df4-11ec-944e-b4a9fcb9227b:1-2
# at 194
#220310  9:40:43 server id 297  end_log_pos 259 CRC32 0x5dcce782        GTID    last_committed=0        sequence_number=1       rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '9bb60b7a-9df4-11ec-944e-b4a9fcb9227b:3'/*!*/;
# at 259
#220310  9:39:50 server id 297  end_log_pos 331 CRC32 0xfb63ce11        Query   thread_id=2     exec_time=0     error_code=0
SET TIMESTAMP=1646876390/*!*/;
SET @@session.pseudo_thread_id=2/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1436549152/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C gbk *//*!*/;
SET @@session.character_set_client=28,@@session.collation_connection=28,@@session.collation_server=8/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 331
#220310  9:39:50 server id 297  end_log_pos 389 CRC32 0x4cf98aa5        Rows_query
# insert into test values(10,'test')
# at 389
#220310  9:39:50 server id 297  end_log_pos 439 CRC32 0xd137dbb0        Table_map: `test`.`test` mapped to number 108
# at 439
#220310  9:39:50 server id 297  end_log_pos 484 CRC32 0xf777fdc0        Write_rows: table id 108 flags: STMT_END_F

BINLOG '
5lYpYh0pAQAAOgAAAIUBAACAACJpbnNlcnQgaW50byB0ZXN0IHZhbHVlcygxMCwndGVzdCcppYr5
TA==
5lYpYhMpAQAAMgAAALcBAAAAAGwAAAAAAAEABHRlc3QABHRlc3QAAgMPAhQAA7DbN9E=
5lYpYh4pAQAALQAAAOQBAAAAAGwAAAAAAAEAAgAC//wKAAAABHRlc3TA/Xf3
'/*!*/;
### INSERT INTO `test`.`test`
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2='test' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
# at 484
#220310  9:40:43 server id 297  end_log_pos 515 CRC32 0xcdb4745f        Xid = 7
COMMIT/*!*/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

下面我每針對每一個event來進行解析

  • binlog日志頭信息

這里面記錄了每一個新的binlog頭的信息盏触,暫時不需要關心驯遇,可以看到里面有一些數(shù)據(jù)庫版本信息等玄渗。

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#220310  9:36:30 server id 297  end_log_pos 123 CRC32 0xf295b2a8        Start: binlog v 4, server v 5.7.36-log created 220310  9:36:30 at startup
# Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
HlYpYg8pAQAAdwAAAHsAAAABAAQANS43LjM2LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAeViliEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AaiylfI=
'/*!*/;
  • Previous_gtid_log_event

記錄當前事務上一個gtid的event

# at 123
#220310  9:36:30 server id 297  end_log_pos 194 CRC32 0x28c16622        Previous-GTIDs
# 9bb60b7a-9df4-11ec-944e-b4a9fcb9227b:1-2
  • gtid_log_event
    記錄當前事務gtid信息的event魔策,注意看時間和commit的時間一樣碎税,所以可以得出润努,gtid信息是在事務提交的時候給分配的情连。

last_committed=0 ,這個值代表當前一個組內(nèi)可以一起commit的最大sequence_number的值,這個值一致的事務可以在從庫并行復制炭菌。

commit-parent 模式:last_committed在binlog組提交的時候共同的last_committed值才會并行復制罪佳。
commit-order 模式:會通過主鍵和unique key 哈希為一個哈希值,存在哈希表中黑低,在并行復制的時候赘艳,即使不在同一個binlog組克握,只要新提交的值的哈希不在哈希表蕾管,就代表不沖突,就可以一起并行復制菩暗。

sequence_number=1 旷坦,這個值代表在每一個binlog開始額度時候每個事務的遞增值,初始值是1,每次加1誊薄。

rbr_only=yes 假如該值是yes.就是基于row格式,否則就包含statement格式昙衅。

# at 194
#220310  9:40:43 server id 297  end_log_pos 259 CRC32 0x5dcce782        GTID    last_committed=0        sequence_number=1       rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '9bb60b7a-9df4-11ec-944e-b4a9fcb9227b:3'/*!*/;
  • Query_log_event

這里設置了一些session級別的值著瓶,并且記錄的begin的語句

# at 259
#220310  9:39:50 server id 297  end_log_pos 331 CRC32 0xfb63ce11        Query   thread_id=2     exec_time=0     error_code=0
SET TIMESTAMP=1646876390/*!*/;
SET @@session.pseudo_thread_id=2/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1436549152/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C gbk *//*!*/;
SET @@session.character_set_client=28,@@session.collation_connection=28,@@session.collation_server=8/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
  • row_query_log_event
    這里記錄了事務執(zhí)行的原始SQL語句,需要在配置文件開啟binlog_rows_query_log_event=on 才可以看到。
# at 331
#220310  9:39:50 server id 297  end_log_pos 389 CRC32 0x4cf98aa5        Rows_query
# insert into test values(10,'test')
  • table_map_event

事務操作對應的表id

# at 389
#220310  9:39:50 server id 297  end_log_pos 439 CRC32 0xd137dbb0        Table_map: `test`.`test` mapped to number 108
  • write_rows_event

代表insert的事務操作記錄和數(shù)據(jù)記錄

# at 439
#220310  9:39:50 server id 297  end_log_pos 484 CRC32 0xf777fdc0        Write_rows: table id 108 flags: STMT_END_F

BINLOG '
5lYpYh0pAQAAOgAAAIUBAACAACJpbnNlcnQgaW50byB0ZXN0IHZhbHVlcygxMCwndGVzdCcppYr5
TA==
5lYpYhMpAQAAMgAAALcBAAAAAGwAAAAAAAEABHRlc3QABHRlc3QAAgMPAhQAA7DbN9E=
5lYpYh4pAQAALQAAAOQBAAAAAGwAAAAAAAEAAgAC//wKAAAABHRlc3TA/Xf3
'/*!*/;
### INSERT INTO `test`.`test`
### SET
###   @1=10 /* INT meta=0 nullable=1 is_null=0 */
###   @2='test' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
  • xid_event
    xid_event表示事務提交,就是commit狭姨。
    xid在redo和binlog都會有,從而崩潰恢復的時候绑莺,判斷binlog假如有xix 就提交纺裁,沒有就回滾欺缘。
# at 484
#220310  9:40:43 server id 297  end_log_pos 515 CRC32 0xcdb4745f        Xid = 7
COMMIT/*!*/;

每個event的產(chǎn)生時間

gtid_log_event ,xid_event 是在commit的時候產(chǎn)生的。

gtid_log_event,row_query_log_event,table_map_event,write_rows_enent 是在執(zhí)行insert語句產(chǎn)生的丛肢。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幽歼,一起剝皮案震驚了整個濱河市颠蕴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌雪隧,老刑警劉巖马僻,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異擒权,居然都是意外死亡袱巨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門菜拓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓣窄,“玉大人,你說我怎么就攤上這事纳鼎。” “怎么了裳凸?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵贱鄙,是天一觀的道長。 經(jīng)常有香客問我姨谷,道長逗宁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任梦湘,我火速辦了婚禮瞎颗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捌议。我一直安慰自己哼拔,他們只是感情好,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布瓣颅。 她就那樣靜靜地躺著倦逐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宫补。 梳的紋絲不亂的頭發(fā)上檬姥,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天曾我,我揣著相機與錄音,去河邊找鬼健民。 笑死抒巢,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的秉犹。 我是一名探鬼主播蛉谜,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼凤优!你這毒婦竟也來了悦陋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤筑辨,失蹤者是張志新(化名)和其女友劉穎俺驶,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棍辕,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡暮现,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了楚昭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栖袋。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖抚太,靈堂內(nèi)的尸體忽然破棺而出塘幅,到底是詐尸還是另有隱情,我是刑警寧澤尿贫,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布电媳,位于F島的核電站,受9級特大地震影響庆亡,放射性物質(zhì)發(fā)生泄漏匾乓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一又谋、第九天 我趴在偏房一處隱蔽的房頂上張望拼缝。 院中可真熱鬧,春花似錦彰亥、人聲如沸咧七。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽猪叙。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間穴翩,已是汗流浹背犬第。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芒帕,地道東北人歉嗓。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像背蟆,于是被迫代替她去往敵國和親鉴分。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容