1. 程式人生 > >解析MySQL binlog --(6)XID_EVENT、ROTATE_EVENT及stop

解析MySQL binlog --(6)XID_EVENT、ROTATE_EVENT及stop

mysql binlog xid

1、XID_EVENT

當事務提交時,不論是statement還是row格式的binlog都會添加一個XID_EVENT作為事務的結束。該事件記錄了該事務的ID。在mysql進行崩潰恢復時根據binlog中提交的情況來決定是否提交存儲引擎中prepared狀態的事務。
技術分享圖片
2、ROTATE_EVENT

當binlog文件大小達到max_binlog_size參數設置的值或執行flush logs命令時,binlog發生切換,這時會在當前使用的binlog文件末尾添加一個ROTATE_EVENT事件,將下一個binlog文件的名稱和位置記錄到該事件中。
技術分享圖片
3、STOP_EVENT

當MySQL服務停止時,會在當前binlog文件尾添加一個STOP_EVENT事件表示數據庫的停止。該事件僅包括一個公有事件頭,沒有私有事件頭和事件體。只需要公有事件頭的event type就可以了。

4、代碼

Xid_log_event::write
    Log_event::write_header
    wrapper_my_b_safe_write(file, (uchar*) &xid, sizeof(xid))
    write_footer(file))//checksum

Rotate_log_event::write
    write_header(file, ROTATE_HEADER_LEN + ident_len)
    wrapper_my_b_safe_write(file, (uchar*) buf, ROTATE_HEADER_LEN)
    wrapper_my_b_safe_write(file, (uchar*) new_log_ident,(uint) ident_len)
    write_footer(file))

解析MySQL binlog --(6)XID_EVENT、ROTATE_EVENT及stop