MySQL三大日志锡足?
binlog(歸檔日志)篮昧、redo.log(重做日志) 和undo.log(回滾日志)
redo.log(重做日志):redo.log(重做日志)是InnoDB存儲引擎獨有的,它讓MySQL擁有了崩潰恢復能力午磁。 比如 MySQL 實例掛了或宕機了尝抖,重啟時,InnoDB存儲引擎會使用redo.log恢復數據迅皇,保證數據的持久性與完整性昧辽,redo.log兩階段提交,先寫入redo.log狀態(tài)置為prepare登颓,然后寫入binlog搅荞,然后將redo.log設置為commit狀態(tài)。
binlog(歸檔日志):MySQL數據庫的數據備份、主備咕痛、主主痢甘、主從都離不開binlog,需要依靠binlog來同步數據茉贡,保證數據一致性binlog 日志有三種格式:
- statement:原始的sql語句产阱,優(yōu)點:占用空間小,缺點块仆,執(zhí)行的時機不通sql語句的值可能不同构蹬,例如time = now()
- row:包含具體數據的sql語句,例如會把now()替換成具體時間悔据,優(yōu)點:執(zhí)行時sql語句值確定庄敛,缺點:占用空間大
- mixed:mysql自己判斷,如果值不會變化科汗,就用statement格式藻烤,否則用row格式
undo.log(回滾日志):當發(fā)生異常時,從undo.log中將數據恢復成原來的樣子头滔,mysql的MVCC依賴隱藏字段怖亭,read view和undo.log實現.
三大日志總結?
MySQL InnoDB 引擎使用 redo.log(重做日志) 保證事務的持久性坤检。
使用 undo.log(回滾日志) 來保證事務的原子性兴猩。
MySQL數據庫的數據備份、主備早歇、主主倾芝、主從都離不開bin.log,需要依靠bin.log來同步數據箭跳,保證數據一致性晨另。