MySQL三大日志?
binlog(歸檔日志)、redo.log(重做日志) 和undo.log(回滾日志)
redo.log(重做日志):redo.log(重做日志)是InnoDB存儲引擎獨有的,它讓MySQL擁有了崩潰恢復能力。 比如 MySQL 實例掛了或宕機了,重啟時,InnoDB存儲引擎會使用redo.log恢復數(shù)據(jù),保證數(shù)據(jù)的持久性與完整性,redo.log兩階段提交,先寫入redo.log狀態(tài)置為prepare,然后寫入binlog,然后將redo.log設(shè)置為commit狀態(tài)。
binlog(歸檔日志):MySQL數(shù)據(jù)庫的數(shù)據(jù)備份、主備、主主、主從都離不開binlog,需要依靠binlog來同步數(shù)據(jù),保證數(shù)據(jù)一致性binlog 日志有三種格式:
- statement:原始的sql語句,優(yōu)點:占用空間小,缺點,執(zhí)行的時機不通sql語句的值可能不同,例如time = now()
- row:包含具體數(shù)據(jù)的sql語句,例如會把now()替換成具體時間,優(yōu)點:執(zhí)行時sql語句值確定,缺點:占用空間大
- mixed:mysql自己判斷,如果值不會變化,就用statement格式,否則用row格式
undo.log(回滾日志):當發(fā)生異常時,從undo.log中將數(shù)據(jù)恢復成原來的樣子,mysql的MVCC依賴隱藏字段,read view和undo.log實現(xiàn).
三大日志總結(jié)?
MySQL InnoDB 引擎使用 redo.log(重做日志) 保證事務(wù)的持久性。
使用 undo.log(回滾日志) 來保證事務(wù)的原子性。
MySQL數(shù)據(jù)庫的數(shù)據(jù)備份、主備、主主、主從都離不開bin.log,需要依靠bin.log來同步數(shù)據(jù),保證數(shù)據(jù)一致性。