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自己做出選擇。