binlog、redolog 和 undolog區(qū)別 ?
一、binlog、redolog 和 undolog區(qū)別 ?
在MySQL數(shù)據(jù)庫中,binlog、redolog 和 undolog 都是日志類型文件,但它們各自的作用和實(shí)現(xiàn)方式有所不同。
binlog主要用來對(duì)數(shù)據(jù)庫進(jìn)行數(shù)據(jù)備份、崩潰恢復(fù)和數(shù)據(jù)復(fù)制等操作,
redo log 和 undo log 主要用于事務(wù)管理,記錄的是數(shù)據(jù)修改操作和回滾操作。
redolog用來做恢復(fù),undolog用來做回滾
崩潰恢復(fù),是指在數(shù)據(jù)庫系統(tǒng)因?yàn)槟撤N原因而發(fā)生崩潰或非正常關(guān)閉后,通過一系列機(jī)制和步驟來恢復(fù)數(shù)據(jù)庫到一個(gè)一致性和可用的狀態(tài)。
崩潰恢復(fù)是數(shù)據(jù)庫管理系統(tǒng)的重要功能,它確保數(shù)據(jù)庫在出現(xiàn)異常情況后能夠自動(dòng)恢復(fù),避免數(shù)據(jù)丟失或數(shù)據(jù)庫狀態(tài)不一致的問題。
在MySQL中,redo log和undo log只適用于InnoDB存儲(chǔ)引擎,因?yàn)橐С质聞?wù)。而不適用于MyISAM等其他存儲(chǔ)引擎。而binlog則適用于所有存儲(chǔ)引擎。
二、binlog
binlog是MySQL用于記錄數(shù)據(jù)庫中的所有DDL語句和DML語句的一種二進(jìn)制日志。它記錄了所有對(duì)數(shù)據(jù)庫結(jié)構(gòu)和數(shù)據(jù)的修改操作,如insert、update 和 delete 等。
binlog主要用來對(duì)數(shù)據(jù)庫進(jìn)行數(shù)據(jù)備份、災(zāi)難恢復(fù)和數(shù)據(jù)復(fù)制等操作。 binlog的格式分為基于語句的格式和基于行的格式。
三、Redo Log
Redo Log是MySQL用于實(shí)現(xiàn)崩潰恢復(fù) 和 數(shù)據(jù)持久性的一種機(jī)制, 在事務(wù)進(jìn)行過程中,MySQL會(huì)將事務(wù)做了什么改動(dòng)到Redo Log中。
當(dāng)系統(tǒng)崩潰或者發(fā)生異常情況時(shí),MySQL會(huì)利用Redo Log中的記錄信息來進(jìn)行恢復(fù)操作,將事務(wù)所做的修改持久化到磁盤中。
四、Undo Log
Undo Log則用于在事務(wù)回滾 或 系統(tǒng)崩潰時(shí)撤銷(回滾)事務(wù)所做的修改,當(dāng)一個(gè)事務(wù)執(zhí)行過程中,MySQL會(huì)將事務(wù)修改前的數(shù)據(jù)記錄到Undo Log中。如果事務(wù)需要回滾,
則會(huì)從Undo Log中找到相應(yīng)的記錄來撤銷事務(wù)所做的修改。另外,Undo Log還支持MVCC(多版本并發(fā)控制)機(jī)制,用于在并發(fā)事務(wù)執(zhí)行時(shí)提供一定的隔離性。

五、擴(kuò)展知識(shí)
undolog 和 redolog區(qū)別
-
目的:Redo log的目的是為了保證事務(wù)的持久性,主要用于崩潰恢復(fù),而 Undo log 的目的是為了保證事務(wù)的原子性和一致性,主要用于事務(wù)回滾。
-
記錄內(nèi)容:Redo Log 記錄了事務(wù)的所有數(shù)據(jù)更改(這些日志不僅僅記錄了數(shù)據(jù)更改的最終結(jié)果,而且還記錄了實(shí)現(xiàn)這些更改的具體操作)。而 Undo log 記錄的是事務(wù)執(zhí)行前的內(nèi)容。

浙公網(wǎng)安備 33010602011771號(hào)