binlog
二進制日誌是mysql-server層的,主要是作主從複製,時間點恢復使用
redo log
重作日誌是InnoDB存儲引擎層的,用來保證事務安全
undo log
回滾日誌保存了事務發生以前的數據的一個版本,能夠用於回滾,同時能夠提供多版本併發控制下的讀(MVCC),也即非鎖定讀mysql
爲了保證master和slave
的數據一致性,則binlog和redo log保持一致
不然當binlog寫完未fsync,主庫crash了,備庫卻執行了,數據會不一致
binlog
是mysql內部實現二階段提交的協調者
爲每一個事務分配一個XID
一階段:
事務狀態爲prepare
,redo log和undo log已經記錄了對應的日誌
二階段:sql
binlog
完成write和fsync
後,成功,事務必定提交了,不然回滾當出現crash等問題,經過掃描binlog
中全部的xid,告知innodb,innodb回滾其它事務安全
若是不一致,會致使數據不一致
BLGC(Binary Log Group Commit) 解決串行prepare_commit_mutex的問題
引入隊列解決,併發
redo log
在事務沒有提交前,每個修改操做都會記錄變動後的數據,保存的是物理日誌->數據
防止在發生故障的時間點,尚有髒頁未寫入磁盤,在重啓mysql服務的時候,根據redo log進行重作,從而達到事務的持久性這一特性.
redo log只是先寫入Innodb_log_buffer,定時fsync到磁盤spa
binlog
只會在日誌提交後,一次性記錄執行過的事務中的sql語句以及其反向sql(做爲回滾用),保存的是邏輯日誌->執行的sql語句
undo log
事務開始以前,將當前版本生成undo log,undo 也會產生 redo 來保證undo log的可靠性,保存的是邏輯日誌->數據前一個版本3d
redo log直接恢復數據
的效率 高於 基於binglog sql語句
恢復
做者:嘵曉的故事
連接:https://www.jianshu.com/p/090087c22820
來源:簡書
簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。日誌