基于MySQL5.7版本,5.7版本在恢復(fù)過程做了優(yōu)化,本文描述不考慮之前版本。

回到頂部(go to top)

1 初始化崩潰恢復(fù)

    數(shù)據(jù)庫(kù)關(guān)閉只有2種情況,正常關(guān)閉,非正常關(guān)閉(包括數(shù)據(jù)庫(kù)實(shí)例crash及服務(wù)器crash)。

    正常關(guān)閉情況,所有buffer pool里邊的臟頁(yè)都會(huì)都會(huì)刷新一遍到磁盤,同時(shí)記錄最新LSN到ibdata文件的第一個(gè)page中。而非正常關(guān)閉來不及做這些操作,也就是沒及時(shí)把臟數(shù)據(jù)flush到磁盤,也沒有記錄最新LSN到ibdata file。

    當(dāng)我們重啟數(shù)據(jù)庫(kù)實(shí)例的時(shí)候,數(shù)據(jù)庫(kù)做2個(gè)階段性操作:redo log處理,undo log及binlog 處理。

1.1 redo log處理

  • 打開系統(tǒng)表空間ibdata,讀取第一個(gè)page中的LSN,若第一個(gè)頁(yè)損壞,則依次往后面的page讀,知道有個(gè)完整的page能夠提供LSN,這個(gè)LSN當(dāng)作上次shutdown時(shí)的checkpoint點(diǎn),后續(xù)恢復(fù),從這個(gè)LSN點(diǎn)開始恢復(fù)

  • 進(jìn)入redo log文件,讀取第一個(gè)redo log文件頭的checkpoint LSN, 并根據(jù)該LSN定位到re

    網(wǎng)友評(píng)論