MySQL binlog的格式解析

我搜集到了一些資料,對理解代碼比較有幫助。html

在頭文件中binlog_event.h中,有描述mysql

class Log_event_headergit

class Log_event_footergithub

參見【Mysteries of the Binary Log Presentation.pdf】sql

代碼見【mysql-5.7.6-m16_src.zip】xcode

 

MySQL binlog頭4個字節:BINLOG_HEADER = b'\xfe\x62\x69\x6e'函數

而後咱們就能夠一個Event,一個Event的讀取了(格式基本就是一段一段的了。)ui

用Python解析Event header.net

struct.unpack("=IBIIIH", header), 獲得的分別是timestamp, typecode, server_id, event_len, next_pos, flasgcode

 

查看當前binlog的設置

show variables like '%log%';

set global binlog_format='row'   ; 'statement'  or   'mixed'

 

binlog格式解析相關的文章和代碼:

http://www.tuicool.com/articles/6RvUnqV

http://www.oschina.net/code/snippet_915111_16360

http://www.xcoder.cn/html/Database/mysql/2013/0526/9191.html

http://blog.csdn.net/wyzxg/article/details/7412777

【解析binlog格式,網上能找到有用的文章並非不少,代碼就更少了,我這份代碼能夠供你們參考。】

https://github.com/healerkx/PySQLKits/tree/master/scripts/mysqlbinlog

 

細節

1. Decimal在binlog中的的存儲格式:

我寫到field_descriptor.py裏面的 decimal_descriptor, parse()函數, 時間久了,之後我再更新它的解析細節描述。

 

更多看我Rust的實現版本吧,相對於Python的版本fix了一些問題,佔用資源確定又少了。

https://github.com/healerkx/mysqlbinlog-rs

相關文章
相關標籤/搜索