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,是以不會破壞資料的一緻性。