隨著互聯(lián)網(wǎng)技術(shù)的迅猛發(fā)展,現(xiàn)在逐步漸入大數(shù)據(jù)、云計(jì)算、虛擬技術(shù)和人工智能時(shí)代,技術(shù)為王的現(xiàn)象越來(lái)越明顯了。學(xué)習(xí)Linux云計(jì)算的人越來(lái)越多了,那么Linux運(yùn)維學(xué)習(xí)數(shù)據(jù)庫(kù)階段,MySQL CSR——前滾是怎樣的?Linux怎么學(xué)? MySQL : 在啟動(dòng)時(shí),必須保證redo日志文件和數(shù)據(jù)文件LSN必須一致, 如果不一致就會(huì)觸發(fā)CSR,最終保證一致 情況一: 我們做了一個(gè)事務(wù),begin;update;commit. 1.在begin ,會(huì)立即分配一個(gè)TXID=tx_01. 2.update時(shí),會(huì)將需要修改的數(shù)據(jù)頁(yè)(dp_01,LSN=101),加載到data buffer中 3.DBWR線(xiàn)程,會(huì)進(jìn)行dp_01數(shù)據(jù)頁(yè)修改更新,并更新LSN=102 4.LOGBWR日志寫(xiě)線(xiàn)程,會(huì)將dp_01數(shù)據(jù)頁(yè)的變化+LSN+TXID存儲(chǔ)到redobuffer 5. 執(zhí)行commit時(shí),LGWR日志寫(xiě)線(xiàn)程會(huì)將redobuffer信息寫(xiě)入redolog日志文件中,基于WAL原則, 在日志完全寫(xiě)入磁盤(pán)后,commit命令才執(zhí)行成功,(會(huì)將此日志打上commit標(biāo)記) 6.假如此時(shí)宕機(jī),內(nèi)存臟頁(yè)沒(méi)有來(lái)得及寫(xiě)入磁盤(pán),內(nèi)存數(shù)據(jù)全部丟失 7.MySQL再次重啟時(shí),必須要redolog和磁盤(pán)數(shù)據(jù)頁(yè)的LSN是一致的.但是,此時(shí)dp_01,TXID=tx_01磁盤(pán)是LSN=101,dp_01,TXID=tx_01,redolog中LSN=102 MySQL此時(shí)無(wú)法正常啟動(dòng),MySQL觸發(fā)CSR.在內(nèi)存追平LSN號(hào),觸發(fā)ckpt,將內(nèi)存數(shù)據(jù)頁(yè)更新到磁盤(pán),從而保證磁盤(pán)數(shù)據(jù)頁(yè)和redolog LSN一值.這時(shí)MySQL正長(zhǎng)啟動(dòng) 以上的工作過(guò)程,我們把它稱(chēng)之為基于REDO的"前滾操作" 想要眾多的IT工作者中脫穎而出,就需要擁有高深的技術(shù),學(xué)習(xí)增值是必不可少的。學(xué)習(xí)之路,是貴在堅(jiān)持的。 |
|