redo log 重做日志(引擎層)
即WAL技術(shù)市俊,將更新記錄寫入redo log坦胶,同時(shí)更新內(nèi)存透典,并在適當(dāng)時(shí)候?qū)⒂涗浡浔P晴楔。
redo log大小是固定的,從頭開始寫峭咒,寫到末尾就回到開頭循環(huán)寫税弃,邏輯環(huán)形。
write pos:寫入位置凑队,隨寫入操作后移则果,邏輯環(huán)形。
checkpoint:落盤位置漩氨,隨落盤后移西壮,邏輯環(huán)形。
redo log保證了才菠,即使MySQL異常重啟茸时,之前提交的記錄都不會(huì)丟失,這個(gè)能力稱為crash-safe
binlog 歸檔日志(Server層)
主從復(fù)制:建立一個(gè)數(shù)據(jù)庫環(huán)境赋访,與源數(shù)據(jù)庫完全一致可都。
作用:
- 1)熱備
- 2)讀寫分離
原理:
- 1)Master將變更記錄寫入binlog。
- 2)Slave向Master發(fā)送Dump協(xié)議蚓耽,拷貝binlog events到中繼日志relay log渠牲。
- 3)Slave讀取并回放relay log中的時(shí)間,將變更的數(shù)據(jù)同步到自己的數(shù)據(jù)庫
binlog類型:
- 1)Statement-based:基于語句步悠,可能造成數(shù)據(jù)不一致签杈。
- 2)Row-based:基于行,記錄每次操作后被操作行的變化鼎兽。
- 3)Mixed:此類型答姥,默認(rèn)為Statement-based,若可能存在數(shù)據(jù)不一致谚咬,自動(dòng)切換至
Row-based鹦付。
兩種日志的不同
1)redo log為InnoDB引擎特有;binlog是MySQL的Server層實(shí)現(xiàn)的择卦,所有引擎通用敲长。
2)redo log是物理日志;binlog是邏輯日志
3)redo log循環(huán)寫(邏輯環(huán)形)秉继,存在覆蓋祈噪;
binlog追加寫,新增文件尚辑,不覆蓋辑鲤。
執(zhí)行流程
2PC 兩階段提交
1)開啟事務(wù)
2)寫入redo log (預(yù)提交)
3)寫入binlog后,提交事務(wù)(正式提交)
任意階段失敗腌巾,事務(wù)回滾
小結(jié)
1)redo log用于保證crash-safe能力遂填,innodb_flush_log_at_trx_commit這個(gè)參數(shù)設(shè)置成1铲觉,每次事務(wù)的redo log都持久化至磁盤。
2)binlog吓坚,主從復(fù)制撵幽,sync_binlog這個(gè)參數(shù)設(shè)置成1,每次事務(wù)的binlog都持久化到磁盤礁击。