天天看點

mysql redo undo 簡書_redo undo 詳解

redo log稱為重做日志,用來保證事務的原子性和持久性。undo log用來保證事務的一緻性。

redo恢複送出事務修改的頁操作,而undo復原行記錄到某個特定版本。是以兩者記錄的内容不同,redo通常是實體日志,記錄的是頁的實體修改操作。undo是邏輯日志,根據每行記錄進行記錄。

ib_logfile0、ib_logfile1

innodb_log_file_size #重做檔案大小

innodb_log_files_in_group #重做檔案數量

innodb_mirrored_log_groups #日志鏡像檔案組數量

innodb_log_group_home_dir #日志檔案組所在路徑

undo及redo事務簡化過程

假設有A、B兩個資料,值分别為1、2,開始一個事務,事務的操作内容為:把1修改為3,2修改為4,那麼實際的記錄如下:

事務開始

記錄 A = 1 => undo log

修改 A = 3

記錄 A = 3 => redo log

記錄 B = 2 => undo log

修改 B = 4

記錄 B = 4 => redo log

将 redo log 寫入磁盤

事務送出

恢複

進行恢複時,重做所有事務包括未送出的事務和復原了的事務。然後通過Undo Log復原那些未送出的事務。

對資料進行修改,是以復原時對資料的操作也會記錄到Redo Log中。

一個復原了的事務的Redo Log,看起來是這樣的:

記錄1: >

記錄2:

記錄3: >

記錄4:

記錄5: >

記錄6:

記錄7:

記錄8:

記錄9:

一個被復原了的事務在恢複時的操作就是先redo再undo,是以不會破壞資料的一緻性。