mysql之redolog PK binlog

mysql之redolog PK binlog

日誌

我是李福春,我在準備面試,今天的題目是:

mysql的redolog和binlog有什麼區別?

答: 如下面的表格,

redolog vs binlog

mysql之redolog PK binlog

redolog vs binlog

然後我們擴展一下,因為日誌主要是記錄的修改日誌,分別加深分析一下:

redolog

redolog是innodb存儲引擎特有的物理日誌,記錄的是數據頁做了什麼改動。

它的存儲空間是固定的,類似一個圓環。日誌空間寫完,需要把相關的操作執行,數據刷到磁盤上釋放空間。

mysql之redolog PK binlog

redolog存儲結構

redolog可以有效保證mysql的crash-safe; 即mysql系統故障重啟,也可以從redolog中恢復;

一般把innodb_flush_log_at_trx_commit=1,即設置redolog每次事務提交日誌落盤,可以更有效的保證crash-safe

binlog

是一種mysql-server層的邏輯修改日誌,有兩種格式:

1,statement格式,記錄的是sql;

2, row格式,記錄了兩行,更新前和更新後的結果;

為了保證系統可以從奔潰狀態恢復,設置參數 sync_binlog=1,即事務提交,binlog落盤;

如何快速恢復mysql:

1,找到最近的備份,恢復到臨時庫;

2,找到備份的binlog,重放到你需要的時刻。

一條update語句歷程

比如有一張表: user(id int primarykey auto_increment , age int default 0 )engin=innodb ;

執行一條sql語句: update user set age=age+1 where id=2 ;

那麼,這條update語句是如何經過mysql的體系結構和日誌文件呢?

1,執行器首先通過存儲引擎讀接口得到這行數據;(如果內存有則返回,不存在從硬盤中取出放入內存再返回)

2,執行器把這行數據的age+1,然後調用存儲引擎的寫接口,寫入數據到內存;

3,存儲引擎把更新操作寫入redolog,日誌狀態為prepare ,告訴執行器事務完成更新操作;

4, 執行器把這個操作寫入binlog,日誌落盤;

5,執行器提交事務,調用存儲日誌寫到redolog,日誌狀態為commit,

binlog,redolog都可以表示事務的狀態; 兩階段提交:保證了binlog,redolog在系統奔潰重啟之後的事務狀態的一致;

小結

本篇分析了redolog和binlog的區別。 然後分別介紹了binlog,redolog所處的mysql的體系結構位置,實際運維過程中的配置參數。 最後追蹤了一條update語句的執行歷程,以及兩種日誌的寫入過程,然後點明兩階段提交是為了保證兩種日誌的事務一致性。

mysql之redolog PK binlog

腦圖小結


分享到:


相關文章: