binlog是Server層的歸檔日誌,沒有crash-safe能力
兩種日誌的不一樣:
1.redo log是InnoDB引擎特有的;binlog是Server層實現的,全部引擎均可以使用
2.redo log是物理日誌,記錄的是 「在某個數據頁上作了什麼修改」;binlog是邏輯日誌,記錄的是這個語句的原始邏輯,好比 「給ID=2這一行的c字段加1」
3.redo log是 循環寫的,空間固定會用完;binlog是 能夠追加寫入的。「追加寫」是指binlog 文件寫到必定大小後會切換到下一個,並不會覆蓋之前的日誌.net
1.執行器先找引擎去ID=2這行,ID是主鍵,引擎用樹搜索找到這行,若是內存存在數據,直接返回給執行器,不然須要先從磁盤讀入內存,再返回
2.執行器拿到引擎給的行數據,將該值加上1,獲得新的一行數據,再調用引擎接口寫入這行新數據
3.引擎將這行新數據更新到內存,同時將更新操做記錄到redo log,redo log處於prepare狀態,而後告知執行器執行完了,隨時能夠提交事務。
4.執行器生成這個操做的binlog,並把binlog寫入磁盤
5.執行器調用引擎的提交事務接口,引擎把剛剛寫入的redo log改爲提交(commit)狀態,更新完成日誌
redo log和binlog均可以用於表示事務的提交狀態,而兩階段提交就是讓這兩個狀態保持邏輯上的一致blog