天天看點

MySQL Binlog 相關知識(一)

MySQL Binlog(本文主體是5.6,其它版本會說明)

MySQL Binlog是記錄一些對資料庫修改資訊的日志。舉例(增,改,查,set 等等)

首先說MySQL Binlog的作用是什麼?

1. 複制用途,MySQL replication 的傳輸媒體。通過記錄一個MySQL執行個體上發生的改變,應用到另一個資料庫上,來實作複制。

2. 資料的恢複,當一部分資料由于某些原因丢失,兒這段時間的binlog 還在,則可以通過binlog恢複這段時間的資料。

MySQL Binlog分為格式:1) Statement, 2) Row , 3) Mixed

他們之間的差別在哪裡呢?

1) Statement

是語句形式的日志,目的在于将主端所有的對MySQL執行個體的修改語句記錄到binlog中。

優點:在 statement 模式下,首先就是解決了 row 模式的缺點,不需要記錄每一行資料的變化,減少了 binlog 日志量,節省 I/O 以及存儲資源,提高性能。因為他隻需要記錄在 master 上所執行的語句的細節,以及執行語句時候的上下文的資訊。

2) Row

是将一部分修改MySQL執行個體的語句變換形式,記錄到binlog中。變換成以每一行的變化為機關的記錄。比如,

{+(1,‘abc’)}                代表新增一行

{-(1,'abc'), +(1,'bbbbb')}  代表更新一行

{-(1,‘bbbbb’)}            代表删除一行

優點:在 row 模式下,bin-log 中可以不記錄執行的 SQL 語句的上下文相關的資訊,僅僅隻需要記錄那一條記錄被修改了,修改成什麼樣了。是以 row 的日志内容會非常清楚的記錄下每一行資料修改的細節,非常容易了解。而且不會出現某些特定情況下的存儲過程或 function ,以及 trigger 的調用和觸發無法被正确複制的問題。

3)Mixed

是說中和一下兩種模式,有的用Row,有的用 statement。由MySQL自己做出選擇。

繼續閱讀