亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL binlog中的事件類型詳解

2024-07-24 13:10:20
字體:
來源:轉載
供稿:網友

MySQL binlog記錄的所有操作實際上都有對應的事件類型的,譬如STATEMENT格式中的DML操作對應的是QUERY_EVENT類型,ROW格式下的DML操作對應的是ROWS_EVENT類型。

首先,看看源碼中定義的事件類型

源碼位置:mysql-5.7.14/libbinlogevents/include/binlog_event.h

enum Log_event_type{/**Every time you update this enum (when you add a type), you have tofix Format_description_event::Format_description_event().*/UNKNOWN_EVENT= 0,START_EVENT_V3= 1,QUERY_EVENT= 2,STOP_EVENT= 3,ROTATE_EVENT= 4,INTVAR_EVENT= 5,LOAD_EVENT= 6,SLAVE_EVENT= 7,CREATE_FILE_EVENT= 8,APPEND_BLOCK_EVENT= 9,EXEC_LOAD_EVENT= 10,DELETE_FILE_EVENT= 11,/**NEW_LOAD_EVENT is like LOAD_EVENT except that it has a longersql_ex, allowing multibyte TERMINATED BY etc; both types share thesame class (Load_event)*/NEW_LOAD_EVENT= 12,RAND_EVENT= 13,USER_VAR_EVENT= 14,FORMAT_DESCRIPTION_EVENT= 15,XID_EVENT= 16,BEGIN_LOAD_QUERY_EVENT= 17,EXECUTE_LOAD_QUERY_EVENT= 18,TABLE_MAP_EVENT = 19,/**The PRE_GA event numbers were used for 5.1.0 to 5.1.15 and aretherefore obsolete.*/PRE_GA_WRITE_ROWS_EVENT = 20,PRE_GA_UPDATE_ROWS_EVENT = 21,PRE_GA_DELETE_ROWS_EVENT = 22,/**The V1 event numbers are used from 5.1.16 until mysql-trunk-xx*/WRITE_ROWS_EVENT_V1 = 23,UPDATE_ROWS_EVENT_V1 = 24,DELETE_ROWS_EVENT_V1 = 25,/**Something out of the ordinary happened on the master*/INCIDENT_EVENT= 26,/**Heartbeat event to be send by master at its idle timeto ensure master's online status to slave*/HEARTBEAT_LOG_EVENT= 27,/**In some situations, it is necessary to send over ignorabledata to the slave: data that a slave can handle in case thereis code for handling it, but which can be ignored if it is notrecognized.*/IGNORABLE_LOG_EVENT= 28,ROWS_QUERY_LOG_EVENT= 29,/** Version 2 of the Row events */WRITE_ROWS_EVENT = 30,UPDATE_ROWS_EVENT = 31,DELETE_ROWS_EVENT = 32,GTID_LOG_EVENT= 33,ANONYMOUS_GTID_LOG_EVENT= 34,PREVIOUS_GTIDS_LOG_EVENT= 35,TRANSACTION_CONTEXT_EVENT= 36,VIEW_CHANGE_EVENT= 37,/* Prepared XA transaction terminal event similar to Xid */XA_PREPARE_LOG_EVENT= 38,/**Add new events here - right above this comment!Existing events (except ENUM_END_EVENT) should never change their numbers*/ENUM_END_EVENT /* end marker */};

實際上還是蠻多的,下面就挑幾個重點的說一下

QUERY_EVENT

QUERY_EVENT以文本的形式來記錄事務的操作。

QUERY_EVENT類型的事件通常在以下幾種情況下使用:

1. 事務開始時,執行的BEGIN操作。

2. STATEMENT格式中的DML操作

3. ROW格式中的DDL操作

譬如:

mysql> show binlog events in 'mysql-bin.000021';+------------------+-----+-------------+-----------+-------------+-----------------------------------------------+| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |+------------------+-----+-------------+-----------+-------------+-----------------------------------------------+| mysql-bin.000021 | 4 | Format_desc | 1 | 120 | Server ver: 5.6.31-log, Binlog ver: 4 || mysql-bin.000021 | 120 | Query | 1 | 195 | BEGIN || mysql-bin.000021 | 195 | Query | 1 | 298 | insert into test.t1 values(1,'a') || mysql-bin.000021 | 298 | Xid | 1 | 329 | COMMIT /* xid=25 */ || mysql-bin.000021 | 329 | Query | 1 | 408 | BEGIN || mysql-bin.000021 | 408 | Query | 1 | 515 | use `test`; insert into test.t1 values(2,'b') || mysql-bin.000021 | 515 | Xid | 1 | 546 | COMMIT /* xid=33 */ |+------------------+-----+-------------+-----------+-------------+-----------------------------------------------+

FORMAT_DESCRIPTION_EVENT

FORMAT_DESCRIPTION_EVENT是binlog version 4中為了取代之前版本中的START_EVENT_V3事件而引入的。它是binlog文件中的第一個事件,而且,該事件只會在binlog中出現一次。MySQL根據FORMAT_DESCRIPTION_EVENT的定義來解析其它事件。

它通常指定了MySQL Server的版本,binlog的版本,該binlog文件的創建時間。

譬如:

# at 4#160817 11:00:10 server id 1 end_log_pos 120 CRC32 0x03010da1 Start: binlog v 4, server v 5.6.31-log created 160817 11:00:10# Warning: this binlog is either in use or was not closed properly. mysql> show binlog events in 'mysql-bin.000021';+------------------+-----+-------------+-----------+-------------+-----------------------------------------------+| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |+------------------+-----+-------------+-----------+-------------+-----------------------------------------------+| mysql-bin.000021 | 4 | Format_desc | 1 | 120 | Server ver: 5.6.31-log, Binlog ver: 4 |... 

ROWS_EVENT

對于ROW格式的binlog,所有的DML語句都是記錄在ROWS_EVENT中。

ROWS_EVENT分為三種:WRITE_ROWS_EVENT,UPDATE_ROWS_EVENT,DELETE_ROWS_EVENT,分別對應insert,update和delete操作。

對于insert操作,WRITE_ROWS_EVENT包含了要插入的數據

對于update操作,UPDATE_ROWS_EVENT不僅包含了修改后的數據,還包含了修改前的值。

對于delete操作,僅僅需要指定刪除的主鍵(在沒有主鍵的情況下,會給定所有列)

對于QUERY_EVENT事件,是以文本形式記錄DML操作的。而對于ROWS_EVENT事件,并不是文本形式,所以在通過mysqlbinlog查看基于ROW格式的binlog時,需要指定-vv --base64-output=decode-rows。

譬如:

mysql> show binlog events in 'mysql-bin.000027';+------------------+-----+-------------+-----------+-------------+---------------------------------------+| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |+------------------+-----+-------------+-----------+-------------+---------------------------------------+| mysql-bin.000027 | 4 | Format_desc | 1 | 120 | Server ver: 5.6.31-log, Binlog ver: 4 || mysql-bin.000027 | 120 | Query | 1 | 188 | BEGIN || mysql-bin.000027 | 188 | Table_map | 1 | 236 | table_id: 80 (test.t1) || mysql-bin.000027 | 236 | Write_rows | 1 | 278 | table_id: 80 flags: STMT_END_F || mysql-bin.000027 | 278 | Xid | 1 | 309 | COMMIT /* xid=198 */ || mysql-bin.000027 | 309 | Query | 1 | 377 | BEGIN || mysql-bin.000027 | 377 | Table_map | 1 | 425 | table_id: 80 (test.t1) || mysql-bin.000027 | 425 | Update_rows | 1 | 475 | table_id: 80 flags: STMT_END_F || mysql-bin.000027 | 475 | Xid | 1 | 506 | COMMIT /* xid=199 */ || mysql-bin.000027 | 506 | Query | 1 | 574 | BEGIN || mysql-bin.000027 | 574 | Table_map | 1 | 622 | table_id: 80 (test.t1) || mysql-bin.000027 | 622 | Delete_rows | 1 | 664 | table_id: 80 flags: STMT_END_F || mysql-bin.000027 | 664 | Xid | 1 | 695 | COMMIT /* xid=200 */ |+------------------+-----+-------------+-----------+-------------+---------------------------------------+13 rows in set (0.00 sec)

XID_EVENT

在事務提交時,不管是STATEMENT還是ROW格式的binlog,都會在末尾添加一個XID_EVENT事件代表事務的結束。該事件記錄了該事務的ID,在MySQL進行崩潰恢復時,根據事務在binlog中的提交情況來決定是否提交存儲引擎中狀態為prepared的事務。

ROTATE_EVENT

當binlog文件的大小達到max_binlog_size的值或者執行flush logs命令時,binlog會發生切換,這個時候會在當前的binlog日志添加一個ROTATE_EVENT事件,用于指定下一個日志的名稱和位置。

mysql> show binlog events in 'mysql-bin.000028';+------------------+-----+-------------+-----------+-------------+---------------------------------------+| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |+------------------+-----+-------------+-----------+-------------+---------------------------------------+| mysql-bin.000028 | 4 | Format_desc | 1 | 120 | Server ver: 5.6.31-log, Binlog ver: 4 || mysql-bin.000028 | 120 | Rotate | 1 | 167 | mysql-bin.000029;pos=4 |+------------------+-----+-------------+-----------+-------------+---------------------------------------+2 rows in set (0.00 sec)
# at 120#160817 12:34:26 server id 1 end_log_pos 167 CRC32 0xd965567c Rotate to mysql-bin.000029 pos: 4 

GTID_LOG_EVENT

在啟用GTID模式后,MySQL實際上為每個事務都分配了個GTID

譬如:

# at 448#160818 5:37:32 server id 1 end_log_pos 496 CRC32 0xaeb24aac GTID [commit=yes]SET @@SESSION.GTID_NEXT= 'cad449f2-5d4f-11e6-b353-000c29c64704:3'/*!*/;# at 496#160818 5:37:32 server id 1 end_log_pos 571 CRC32 0x042ca092 Query thread_id=2 exec_time=0 error_code=0SET TIMESTAMP=1471469852/*!*/;BEGIN/*!*/;# at 571#160818 5:37:32 server id 1 end_log_pos 674 CRC32 0xa35beb37 Query thread_id=2 exec_time=0 error_code=0SET TIMESTAMP=1471469852/*!*/;insert into test.t1 values(2,'b')/*!*/;# at 674#160818 5:37:32 server id 1 end_log_pos 705 CRC32 0x1905d8c6 Xid = 12COMMIT/*!*/;
mysql> show binlog events in 'mysql-bin.000033';+------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |+------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+| mysql-bin.000033 | 4 | Format_desc | 1 | 120 | Server ver: 5.6.31-log, Binlog ver: 4 || mysql-bin.000033 | 120 | Previous_gtids | 1 | 191 | cad449f2-5d4f-11e6-b353-000c29c64704:1 || mysql-bin.000033 | 191 | Gtid | 1 | 239 | SET @@SESSION.GTID_NEXT= 'cad449f2-5d4f-11e6-b353-000c29c64704:2' || mysql-bin.000033 | 239 | Query | 1 | 314 | BEGIN || mysql-bin.000033 | 314 | Query | 1 | 417 | insert into test.t1 values(1,'a') || mysql-bin.000033 | 417 | Xid | 1 | 448 | COMMIT /* xid=11 */ || mysql-bin.000033 | 448 | Gtid | 1 | 496 | SET @@SESSION.GTID_NEXT= 'cad449f2-5d4f-11e6-b353-000c29c64704:3' || mysql-bin.000033 | 496 | Query | 1 | 571 | BEGIN || mysql-bin.000033 | 571 | Query | 1 | 674 | insert into test.t1 values(2,'b') || mysql-bin.000033 | 674 | Xid | 1 | 705 | COMMIT /* xid=12 */ || mysql-bin.000033 | 705 | Rotate | 1 | 752 | mysql-bin.000034;pos=4 |+------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+11 rows in set (0.00 sec)

PREVIOUS_GTIDS_LOG_EVENT

開啟GTID模式后,每個binlog開頭都會有一個PREVIOUS_GTIDS_LOG_EVENT事件,它的值是上一個binlog的PREVIOUS_GTIDS_LOG_EVENT+GTID_LOG_EVENT,實際上,在數據庫重啟的時候,需要重新填充gtid_executed的值,該值即是最新一個binlog的PREVIOUS_GTIDS_LOG_EVENT+GTID_LOG_EVENT。

譬如:

mysql> show binlog events in 'mysql-bin.000033';+------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |+------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+| mysql-bin.000033 | 4 | Format_desc | 1 | 120 | Server ver: 5.6.31-log, Binlog ver: 4 || mysql-bin.000033 | 120 | Previous_gtids | 1 | 191 | cad449f2-5d4f-11e6-b353-000c29c64704:1 || mysql-bin.000033 | 191 | Gtid | 1 | 239 | SET @@SESSION.GTID_NEXT= 'cad449f2-5d4f-11e6-b353-000c29c64704:2' || mysql-bin.000033 | 239 | Query | 1 | 314 | BEGIN || mysql-bin.000033 | 314 | Query | 1 | 417 | insert into test.t1 values(1,'a') || mysql-bin.000033 | 417 | Xid | 1 | 448 | COMMIT /* xid=11 */ || mysql-bin.000033 | 448 | Gtid | 1 | 496 | SET @@SESSION.GTID_NEXT= 'cad449f2-5d4f-11e6-b353-000c29c64704:3' || mysql-bin.000033 | 496 | Query | 1 | 571 | BEGIN || mysql-bin.000033 | 571 | Query | 1 | 674 | insert into test.t1 values(2,'b') || mysql-bin.000033 | 674 | Xid | 1 | 705 | COMMIT /* xid=12 */ || mysql-bin.000033 | 705 | Rotate | 1 | 752 | mysql-bin.000034;pos=4 |+------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+11 rows in set (0.00 sec)
mysql> show binlog events in 'mysql-bin.000034';+------------------+-----+----------------+-----------+-------------+------------------------------------------+| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |+------------------+-----+----------------+-----------+-------------+------------------------------------------+| mysql-bin.000034 | 4 | Format_desc | 1 | 120 | Server ver: 5.6.31-log, Binlog ver: 4 || mysql-bin.000034 | 120 | Previous_gtids | 1 | 191 | cad449f2-5d4f-11e6-b353-000c29c64704:1-3 |+------------------+-----+----------------+-----------+-------------+------------------------------------------+2 rows in set (0.00 sec)

mysql-bin.000033日志中的Previous_gtids是cad449f2-5d4f-11e6-b353-000c29c64704:1,GTID是cad449f2-5d4f-11e6-b353-000c29c64704:2和cad449f2-5d4f-11e6-b353-000c29c64704:3,這樣,在下一個日志,即mysql-bin.000034中的Previous_gtids是cad449f2-5d4f-11e6-b353-000c29c64704:1-3。

# at 120#160818 5:39:38 server id 1 end_log_pos 191 CRC32 0x4e84f3b5 Previous-GTIDs# cad449f2-5d4f-11e6-b353-000c29c64704:1-3 

STOP_EVENT

當MySQL數據庫停止時,會在當前的binlog末尾添加一個STOP_EVENT事件表示數據庫停止。

譬如:

mysql> show binlog events in 'mysql-bin.000030';+------------------+-----+-------------+-----------+-------------+---------------------------------------+| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |+------------------+-----+-------------+-----------+-------------+---------------------------------------+| mysql-bin.000030 | 4 | Format_desc | 1 | 120 | Server ver: 5.6.31-log, Binlog ver: 4 || mysql-bin.000030 | 120 | Stop | 1 | 143 | |+------------------+-----+-------------+-----------+-------------+---------------------------------------+2 rows in set (0.04 sec)
# at 120#160818 5:18:04 server id 1 end_log_pos 143 CRC32 0xf20ddc85 Stop

以上所述是小編給大家介紹的MySQL binlog中的事件類型詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一级高清免费播放| 97色在线观看| 久久69精品久久久久久久电影好| 奇门遁甲1982国语版免费观看高清| 97超视频免费观看| 亚洲成人1234| 91高清在线免费观看| 久久在线视频在线| 亚洲激情视频在线观看| 91青草视频久久| 国产精品极品尤物在线观看| 91在线观看免费高清完整版在线观看| 亚洲图片制服诱惑| 国产精品精品一区二区三区午夜版| 精品爽片免费看久久| 午夜精品在线观看| 国产性色av一区二区| 亚洲欧美日韩国产中文| 日韩精品视频在线播放| 亚洲嫩模很污视频| 日韩美女免费线视频| 91精品免费看| 亚洲第一天堂无码专区| 国产精品高潮在线| 高清日韩电视剧大全免费播放在线观看| 日韩免费在线观看视频| 青青久久av北条麻妃海外网| 国内精品一区二区三区四区| 夜夜嗨av一区二区三区四区| 亚洲欧美国产日韩中文字幕| 视频在线一区二区| 亚洲国产精品999| 两个人的视频www国产精品| 精品国产91久久久久久| 日本精品va在线观看| 成人黄色生活片| 亚洲第一区第一页| 日韩av最新在线观看| 欧美日韩免费网站| 伦伦影院午夜日韩欧美限制| 亚洲第一中文字幕| 久久久久国色av免费观看性色| 国产亚洲精品高潮| 欧美成人中文字幕在线| 亚洲欧美www| 欧美成人免费大片| 亚洲天天在线日亚洲洲精| 久久久久久亚洲精品| 欧美洲成人男女午夜视频| 亚洲精品视频网上网址在线观看| 青青草国产精品一区二区| 成人黄色短视频在线观看| 亚洲嫩模很污视频| 亚洲免费av电影| 亚洲va男人天堂| 欧美老少配视频| 久久精品青青大伊人av| 日韩电视剧在线观看免费网站| 亚洲精品中文字| 午夜精品一区二区三区在线| 国产欧美在线观看| 中文字幕日韩欧美在线视频| 日韩在线观看免费高清完整版| 国外色69视频在线观看| 精品国产欧美一区二区五十路| 国产香蕉97碰碰久久人人| 亚洲成年人影院在线| 久久伊人91精品综合网站| 久久99久久亚洲国产| 毛片精品免费在线观看| 久久久久久久久亚洲| 欧美大片大片在线播放| 亚洲国产精品一区二区三区| 97婷婷大伊香蕉精品视频| 日韩视频免费看| 中文字幕日韩欧美| 日韩中文av在线| 国产精品国产自产拍高清av水多| 国产精品一二三视频| 国产精品久久精品| 久久久国产影院| 欧美日本中文字幕| 欧美多人爱爱视频网站| 国产欧美在线观看| 亚洲最大的成人网| 国产综合色香蕉精品| 亚洲激情在线视频| 国产丝袜一区二区| 66m—66摸成人免费视频| 国产自摸综合网| 91精品综合视频| 色婷婷亚洲mv天堂mv在影片| 日本亚洲欧美成人| 精品精品国产国产自在线| 精品国产一区二区三区四区在线观看| 国产午夜精品美女视频明星a级| 日韩毛片在线看| 国产成人短视频| 91精品国产综合久久男男| 亚洲欧美在线播放| 日韩黄色高清视频| 亚洲www视频| 91中文精品字幕在线视频| 国产精品中文字幕久久久| 国产欧美日韩丝袜精品一区| 欧美国产日韩一区二区在线观看| 国产精品直播网红| 中日韩美女免费视频网站在线观看| 国产精品精品一区二区三区午夜版| 黑丝美女久久久| 欧美视频专区一二在线观看| 日韩一区二区精品视频| 成人国产精品久久久| 国产+成+人+亚洲欧洲| 日本欧美一级片| 亚洲日本欧美日韩高观看| 91视频8mav| 久久人人97超碰精品888| 日韩欧美国产视频| 亚洲午夜激情免费视频| 国产成人a亚洲精品| 国产成人精品一区二区三区| 成人美女免费网站视频| 亚洲精品视频播放| 色青青草原桃花久久综合| 日韩在线观看网址| 成人网中文字幕| 欧美成人性色生活仑片| 久久久久久久久中文字幕| 亚洲91精品在线观看| 国产精品中文字幕久久久| 亚洲专区中文字幕| 欧美日韩亚洲一区二| 欧美精品久久久久| 在线播放精品一区二区三区| 欧美乱大交xxxxx| 欧美极品第一页| 日本一区二区在线免费播放| 91成人福利在线| 精品国产欧美一区二区三区成人| 96精品久久久久中文字幕| 国产精品视频一区国模私拍| 久久电影一区二区| 久久久免费观看视频| 成人午夜一级二级三级| 亚洲天堂免费观看| 国产精品免费在线免费| 中文字幕不卡在线视频极品| 91超碰caoporn97人人| 久久手机精品视频| 国产亚洲一区二区在线| 亚洲资源在线看| 国产精品久久久久久久av电影| 欧美激情第三页| 国产精品亚洲аv天堂网| 伊人激情综合网| 日韩成人在线观看| 91精品国产91久久久久久久久| 亚洲欧美日韩图片| 日本久久久久久久| 久久人人爽亚洲精品天堂| 国产精品成av人在线视午夜片| 97精品一区二区视频在线观看| 成人动漫网站在线观看|