Mysql的組成結(jié)構(gòu)

mysql的基本邏輯結(jié)構(gòu).png

mysql主要分為客戶端、Server層、存儲(chǔ)引擎層
Server層中存在連接器,緩存區(qū),詞法分析器,優(yōu)化器以及執(zhí)行器。其操作順序是連接校驗(yàn)權(quán)限后如果開啟了緩存區(qū)訪問(wèn)的話,會(huì)先訪問(wèn)緩存區(qū)中是否存在該語(yǔ)句注:緩存區(qū)的存儲(chǔ)結(jié)構(gòu)是key-value,key對(duì)應(yīng)的sql。如果緩存區(qū)中沒有會(huì)先經(jīng)過(guò)詞法分析器分析成功之后進(jìn)入優(yōu)化器,執(zhí)行器

\color{blue}{mysql日志模塊}
redo log 和bin log的區(qū)別
bin log是一個(gè)邏輯日志,里面存儲(chǔ)的是更新語(yǔ)句的處理邏輯;redo log是一個(gè)物理日志,里面存儲(chǔ)的是更新語(yǔ)句的執(zhí)行結(jié)果。比如說(shuō)張三原本有100元,現(xiàn)在李四給其轉(zhuǎn)了200元,那么redo log中記錄的就是張三的300元。而Bin log對(duì)應(yīng)的是邏輯日志它記錄的就是100+200邏輯運(yùn)算的一個(gè)過(guò)程。Bin log是不限大小,追加寫入。而redo log是有一個(gè)限定的大小。其中bin log是可以用來(lái)將誤刪除的數(shù)據(jù)從日志中將其歸檔找回來(lái)。

redo log理解
redo log是Innodb引擎中特有的,執(zhí)行數(shù)據(jù)的寫入采用的是WAL機(jī)制(Write-Ahead Logging)先寫日志再寫磁盤。如果沒有采用wal機(jī)制的化每次都往磁盤文件中寫入數(shù)據(jù)是非常麻煩的,因?yàn)槲覀兊臄?shù)據(jù)在磁盤中是結(jié)構(gòu)化存儲(chǔ)的,當(dāng)插入數(shù)據(jù)的數(shù)據(jù)的時(shí)候先要查詢數(shù)據(jù)的存儲(chǔ)位置再寫入而使用了wal機(jī)制將其先寫入redo 日志中該機(jī)制里面還有一個(gè)檢查機(jī)制,待數(shù)據(jù)庫(kù)不忙的時(shí)候再將日志中的數(shù)據(jù)同步到磁盤文件中。其中redo log在mysql的data文件中對(duì)應(yīng)的是ib_logfile1和ib_logfile0

redolog寫入的原理
redo log在mysql的data文件夾中存在兩個(gè)文件,寫入的時(shí)候按照循環(huán)寫入的規(guī)則,先往文件1中寫入,文件1寫滿時(shí),切換到文件2中,如果兩個(gè)文件都寫滿此時(shí)checkpoint(當(dāng)前邊寫邊后移)會(huì)回到文件1中通知innodb引擎擦除已經(jīng)提交的日志。如果都沒有提交,此時(shí)的mysql會(huì)停下來(lái),先把文件1中的一部分?jǐn)?shù)據(jù)同步到數(shù)據(jù)表中才會(huì)接收新的更新任務(wù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容