通常只有即將執行完畢的語句才會寫入到二進位日誌中。但是一些特殊情況:語句附加的信息或直接代替語句被寫入。 ...
通常只有即將執行完畢的語句才會寫入到二進位日誌中。但是一些特殊情況:語句附加的信息或直接代替語句被寫入。
二進位日誌記錄的內容
作用:記錄資料庫中表的更變,用於複製和PITP(即時恢復)
基於語句SBR中複製的動作觀察:
[root@localhost][(none)]> use boss; Database changed [root@localhost][boss]> create table tb1(text text); Query OK, 0 rows affected (0.32 sec) [root@localhost][boss]> insert into tb1 values("Yeah!Repliacation"); Query OK, 1 row affected (0.06 sec) [root@localhost][boss]> select * from tb1; +-------------------+ | text | +-------------------+ | Yeah!Repliacation | +-------------------+ 1 row in set (0.00 sec) [root@localhost][boss]> flush logs; Query OK, 0 rows affected (0.24 sec) [root@localhost][boss]> show binlog events; +------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+ | mysql_bin.000014 | 4 | Format_desc | 37306 | 123 | Server ver: 5.7.17-log, Binlog ver: 4 | | mysql_bin.000014 | 123 | Previous_gtids | 37306 | 154 | | | mysql_bin.000014 | 154 | Gtid | 37306 | 219 | SET @@SESSION.GTID_NEXT= 'a0c06ec7-fef0-11e6-9f85-525400a7d662:1' | | mysql_bin.000014 | 219 | Query | 37306 | 320 | use `boss`; create table tb1(text text) | | mysql_bin.000014 | 320 | Gtid | 37306 | 385 | SET @@SESSION.GTID_NEXT= 'a0c06ec7-fef0-11e6-9f85-525400a7d662:2' | | mysql_bin.000014 | 385 | Query | 37306 | 457 | BEGIN | | mysql_bin.000014 | 457 | Rows_query | 37306 | 524 | # insert into tb1 values("Yeah!Repliacation") | | mysql_bin.000014 | 524 | Table_map | 37306 | 571 | table_id: 234 (boss.tb1) | | mysql_bin.000014 | 571 | Write_rows | 37306 | 626 | table_id: 234 flags: STMT_END_F | | mysql_bin.000014 | 626 | Xid | 37306 | 657 | COMMIT /* xid=42 */ | | mysql_bin.000014 | 657 | Rotate | 37306 | 704 | mysql_bin.000015;pos=4 | +------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+ 11 rows in set (0.00 sec)
Event_type:事件類型,到5.6.12開始,已經有35中事件類型
二進位日誌並不是一個單獨文件,由一組存儲實際內容的二進位日誌文件和一個跟蹤二進位日誌文件存儲位置的二進位日誌索引文件
每一個二進位日誌文件以格式描述事件開始(format description event),以日誌輪換事件(rotate event)結束
格式描述事件包括:改文件的伺服器版本號。伺服器及二進位日誌信息,還有一個標記,標記二進位日誌文件是否正確關閉。如果正在寫入二進位日誌,則設置該標記,否則清除該標記(這樣可以檢測
出在奔潰時間中損壞的二進位日誌文件,並允許通過複製進行恢復)
日誌輪換包括:下一個二進位日誌文件的名稱及告知二進位日誌繼續寫入到哪個文件
每個二進位日誌有多個二進位日誌事件,各個事件之間相互獨立,同時也構成了二進位日誌的基本單元。