解析MYSQL BINLOG 二進位制格式(4)--TABLE_MAP_EVENT
原創:轉載請說明出處謝謝!
上接
http://blog.itpub.net/7728585/viewspace-2133188/ 解析MYSQL BINLOG 二進位制格式(1)--準備工作
http://blog.itpub.net/7728585/viewspace-2133189/ 解析MYSQL BINLOG 二進位制格式(2)--FORMAT_DESCRIPTION_EVENT
http://blog.itpub.net/7728585/viewspace-2133321/ 解析MYSQL BINLOG 二進位制格式(3)--QUERY_EVENT
class:Table_map_log_event
event:TABLE_MAP_EVENT
event_code:19
本event只用於 row模式的bin log ,從5.1.5開始,其實這部分
包含了大量的關於表的原資料,也是在保證slave正確
複製資料的重要event
--fixed data
6 bytes 表ID
2 bytes 保留
--variable data part
1 bytes 資料庫名長度
var-size 資料庫名字 0x00 結尾
1 bytes 表名長度
var-size 表名 0x00 結尾
packed interger 欄位數量 注意這裡就是packed interger參考第一篇文章
var-size 欄位型別,每一個位元組代表一個欄位,如下:
typedef enum enum_field_types {
MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,
MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG,
MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE,
MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP,
MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24,
MYSQL_TYPE_DATE, MYSQL_TYPE_TIME,
MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR,
MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR,
MYSQL_TYPE_BIT,
MYSQL_TYPE_TIMESTAMP2,
MYSQL_TYPE_DATETIME2,
MYSQL_TYPE_TIME2,
MYSQL_TYPE_JSON=245,
MYSQL_TYPE_NEWDECIMAL=246,
MYSQL_TYPE_ENUM=247,
MYSQL_TYPE_SET=248,
MYSQL_TYPE_TINY_BLOB=249,
MYSQL_TYPE_MEDIUM_BLOB=250,
MYSQL_TYPE_LONG_BLOB=251,
MYSQL_TYPE_BLOB=252,
MYSQL_TYPE_VAR_STRING=253,
MYSQL_TYPE_STRING=254,
MYSQL_TYPE_GEOMETRY=255
} enum_field_types;
packed interger:metadata block 長度,注意這裡就是packed interger參考第一篇文章
var-size metadata block資料
var-size 每一位代表這個欄位的值是否為NULL,其長度為 INT((n+7)/8) n代表欄位數量
接下來具體解析一個
--
00000200 bf ba 78 97 58 13 e5 6b 01 00 33 00 00 00 34 02 |..x.X..k..3...4.|
00000210 00 00 00 00 ae 00 00 00 00 00 01 00 04 74 65 73 |.............tes|
00000220 74 00 05 6d 79 62 69 6e 00 02 03 0f 02 3c 00 03 |t..mybin.....<..|
00000230 a1 23 ad 72
這次關於event header 部分就不解析了
ba 78 97 58 13 e5 6b 01 00 33 00 00 00 34 02
00 00 00 00
也就是這部分,直接進入event data部分
--fixed data part
ae 00 00 00 00 00 :表ID 174
01 00:保留
--variable data part
04:資料庫名長度 4位元組
74 65 73 74 00:資料庫名test 0x00結尾
05:表名長度 5位元組
6d 79 62 69 6e 00:表名mybin 0X00結尾
02:欄位數量 2個欄位
03:MYSQL_TYPE_LONG(4位元組int型別)
0f:MYSQL_TYPE_VARCHAR(varchar型別)
02:metadata lenth
3c 00:metadata block 第一個欄位不需要長度,第二個欄位為可變型別長度為60
03:00000011 都可以為NULL
a1 23 ad 72:CRC32 校驗4位元組
到此為止:表中的說明資料就出來了,在MYSQLBINLOG中會看到
# at 513
#170206 3:10:50 server id 93157 end_log_pos 564 CRC32 0x72ad23a1 Table_map: `test`.`mybin` mapped to number 174
以及在表中
### INSERT INTO `test`.`mybin`
### SET
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
### @2='gaopeng' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
資訊:
CRC32 0x72ad23a1 Table_map: `test`.`mybin` mapped to number 174
明顯來自Table_map_log_event
而且類似/* VARSTRING(60) meta=60 nullable=1 is_null=0 */
中的 VARSTRING(60) meta=60 nullable=1 都來自於
Table_map_log_event
並且可以看到和解析出來的一模一樣
上接
http://blog.itpub.net/7728585/viewspace-2133188/ 解析MYSQL BINLOG 二進位制格式(1)--準備工作
http://blog.itpub.net/7728585/viewspace-2133189/ 解析MYSQL BINLOG 二進位制格式(2)--FORMAT_DESCRIPTION_EVENT
http://blog.itpub.net/7728585/viewspace-2133321/ 解析MYSQL BINLOG 二進位制格式(3)--QUERY_EVENT
class:Table_map_log_event
event:TABLE_MAP_EVENT
event_code:19
包含了大量的關於表的原資料,也是在保證slave正確
複製資料的重要event
--fixed data
6 bytes 表ID
2 bytes 保留
--variable data part
1 bytes 資料庫名長度
var-size 資料庫名字 0x00 結尾
1 bytes 表名長度
var-size 表名 0x00 結尾
packed interger 欄位數量 注意這裡就是packed interger參考第一篇文章
var-size 欄位型別,每一個位元組代表一個欄位,如下:
typedef enum enum_field_types {
MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,
MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG,
MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE,
MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP,
MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24,
MYSQL_TYPE_DATE, MYSQL_TYPE_TIME,
MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR,
MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR,
MYSQL_TYPE_BIT,
MYSQL_TYPE_TIMESTAMP2,
MYSQL_TYPE_DATETIME2,
MYSQL_TYPE_TIME2,
MYSQL_TYPE_JSON=245,
MYSQL_TYPE_NEWDECIMAL=246,
MYSQL_TYPE_ENUM=247,
MYSQL_TYPE_SET=248,
MYSQL_TYPE_TINY_BLOB=249,
MYSQL_TYPE_MEDIUM_BLOB=250,
MYSQL_TYPE_LONG_BLOB=251,
MYSQL_TYPE_BLOB=252,
MYSQL_TYPE_VAR_STRING=253,
MYSQL_TYPE_STRING=254,
MYSQL_TYPE_GEOMETRY=255
} enum_field_types;
packed interger:metadata block 長度,注意這裡就是packed interger參考第一篇文章
var-size metadata block資料
var-size 每一位代表這個欄位的值是否為NULL,其長度為 INT((n+7)/8) n代表欄位數量
接下來具體解析一個
--
00000200 bf ba 78 97 58 13 e5 6b 01 00 33 00 00 00 34 02 |..x.X..k..3...4.|
00000210 00 00 00 00 ae 00 00 00 00 00 01 00 04 74 65 73 |.............tes|
00000220 74 00 05 6d 79 62 69 6e 00 02 03 0f 02 3c 00 03 |t..mybin.....<..|
00000230 a1 23 ad 72
這次關於event header 部分就不解析了
ba 78 97 58 13 e5 6b 01 00 33 00 00 00 34 02
00 00 00 00
也就是這部分,直接進入event data部分
--fixed data part
ae 00 00 00 00 00 :表ID 174
01 00:保留
--variable data part
04:資料庫名長度 4位元組
74 65 73 74 00:資料庫名test 0x00結尾
05:表名長度 5位元組
6d 79 62 69 6e 00:表名mybin 0X00結尾
02:欄位數量 2個欄位
03:MYSQL_TYPE_LONG(4位元組int型別)
0f:MYSQL_TYPE_VARCHAR(varchar型別)
02:metadata lenth
3c 00:metadata block 第一個欄位不需要長度,第二個欄位為可變型別長度為60
03:00000011 都可以為NULL
a1 23 ad 72:CRC32 校驗4位元組
到此為止:表中的說明資料就出來了,在MYSQLBINLOG中會看到
# at 513
#170206 3:10:50 server id 93157 end_log_pos 564 CRC32 0x72ad23a1 Table_map: `test`.`mybin` mapped to number 174
以及在表中
### INSERT INTO `test`.`mybin`
### SET
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
### @2='gaopeng' /* VARSTRING(60) meta=60 nullable=1 is_null=0 */
資訊:
CRC32 0x72ad23a1 Table_map: `test`.`mybin` mapped to number 174
明顯來自Table_map_log_event
而且類似/* VARSTRING(60) meta=60 nullable=1 is_null=0 */
中的 VARSTRING(60) meta=60 nullable=1 都來自於
Table_map_log_event
並且可以看到和解析出來的一模一樣
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2133429/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 解析MYSQL BINLOG二進位制格式(9)--infobin解析binlog幫助文件MySql
- 解析MYSQL BINLOG二進位制格式(10)--問題解答MySql
- 解析MYSQL BINLOG 二進位制格式(1)--準備工作MySql
- 解析MYSQL BINLOG 二進位制格式(3)--QUERY_EVENTMySql
- 解析MYSQL BINLOG 二進位制格式(5)--WRITE_ROW_EVENTMySql
- 解析MYSQL BINLOG 二進位制格式(2)--FORMAT_DESCRIPTION_EVENTMySqlORM
- 解析MYSQL BINLOG 二進位制格式(6)--UPDATE_ROW_EVENT/DELETE_ROW_EVENTMySqldelete
- MySQL二進位制檔案(binlog)MySql
- 解析MYSQL BINLOG 二進位制格式(7)--Xid_log_event/XID_EVENTMySql
- Java二進位制Class檔案格式解析Java
- 解析MYSQL BINLOG二進位制格式(8)--GTID_LOG_EVENT/ANONYMOUS_GTID_LOG_EVENT及其他MySql
- mysql二進位制日誌格式介紹MySql
- 如何在MySQL中檢視binlog二進位制日誌?MySql
- office檔案格式複合文件二進位制結構解析
- MySQL二進位制日誌MySql
- mysql 二進位制日誌MySql
- mixed模式下的binlog二進位制日誌解析,需要加-v引數模式
- 二進位制求5個1的格式。。。。
- Mysql二進位制包安裝MySql
- 管理mysql二進位制日誌MySql
- mysql的二進位制日誌MySql
- 二進位制與二進位制運算
- 進位制詳解:二進位制、八進位制和十六進位制
- [MySQL binlog]徹底解析Mixed日誌格式的binlogMySql
- JavaScript 二進位制、八進位制與十六進位制JavaScript
- MySQL二進位制日誌的三種格式優缺點比較MySql
- MySQL 壓縮二進位制日誌MySql
- mysql二進位制日誌詳解MySql
- MySQL linux二進位制安裝MySqlLinux
- mysql 二進位制日誌總結MySql
- 利用vstruct解析二進位制資料Struct
- (二進位制)
- 二進位制
- 十進位制——二 (八、十六 )進位制
- 二進位制,八進位制,十進位制,十六進位制的相互轉換
- 【進位制轉換】二進位制、十六進位制、十進位制、八進位制對應關係
- 二進位制、十進位制與十六進位制相互轉化
- java中二進位制、八進位制、十進位制、十六進位制的轉換Java