單機存儲引擎到mysql的思考三

上一篇我們闡述mysql鎖機制以及MCVV多版本併發控制消除
讀寫阻塞本篇我們看看redo log、undo log以及bin log

標題 網址
單機存儲引擎到mysql的思考一 https://blog.csdn.net/xk4848123/article/details/105166855
單機存儲引擎到mysql的思考二 https://blog.csdn.net/xk4848123/article/details/105195921
單機存儲引擎到mysql的思考三 https://blog.csdn.net/xk4848123/article/details/105207797

redo log

redo中的re是重新,do是做,字面上來看是重做日誌,沒錯事實上也就是重做日誌。redo log在數據庫重啓恢復的時候被使用,因爲其屬於物理日誌的特性,恢復速度遠快於邏輯日誌。

1.Write Ahead Log策略
Write-Ahead Log (WAL 預寫式日誌):對數據文件的修改(它們是表和索引的載體)必須是只能發生在這些修改已經記錄了日誌之後,也就是說,在描述這些變化的日誌記錄沖刷到永久存儲器之後
這是事務ACID中D(Durability持久性)的要求。

2.CheckPoint技術和作用
a.縮短數據庫的恢復時間
當數據庫宕機時,數據庫不需要重做所有日誌,因爲CheckPoint之前的頁都已經刷新回磁盤。只需對CheckPoint後的重做日誌進行恢復,從而縮短恢復時間
b.緩衝池不夠用時,將髒頁刷新到磁盤
當緩存池不夠用時,LRU算法會溢出最近最少使用的頁,若此頁爲髒頁,會強制執行CheckPoint,將該髒頁刷回磁盤
c.重做日誌不可用時,刷新髒頁
不可用是因爲對重做日誌的設計是循環使用的。重做日誌可以被重用的部分,是指當數據庫進行恢復操作時不需要的部分。若此時這部分重做日誌還有用,將強制執行CheckPoint,將緩衝池的頁至少刷新到當前重做日誌的位置
d.CheckPoint做的事
將緩存池中的髒頁刷回磁盤
3.LSN(Log Sequence Number)
LSN是用來標記版本的
LSN是8字節的數字
每個頁有LSN,重做日誌也有LSN,CheckPoint也有LSN
CheckPoint技術通過比對數據頁和重做日誌的LSN(版本)來進行恢復

undo log

1.Undo Log 保證事務的原子性,比如某一時刻數據庫 DOWN 機了,一個事務正在處理。數據庫重啓的時候就要根據日誌進行回滾,把未提交事務的更改恢復到事務開始前的狀態。即,當數據 crash-recovery 時,所有已經 prepared 但是沒有 commit 的 transactions 將會應用 undo log 做 roll back。
2.在 InnoDB 引擎中,用 Undo Log 來實現 MVCC
思考二中我們已經講到了MVCC,這是還要做個補充
每張表的每一行還有一個隱式的列就是 undo log ptr(指向undo log的指針),這樣RR隔離級別下就能找到相應版本的快照,保證可重複讀。

binlog及主從複製

binlog是什麼

binlog是mysql的邏輯日誌,記錄的是邏輯sql修改語句。

主從複製

介紹一下mysql主從是異步複製過程。master開啓bin-log功能,日誌文件用於記錄數據庫的讀寫增刪需要開啓3個線程,master IO線程,slave開啓 IO線程 SQL線程,Slave 通過IO線程連接master,並且請求某個bin-log,position之後的內容。MASTER服務器收到slave IO線程發來的日誌請求信息,io線程去將bin-log內容,position返回給slave IO線程。slave服務器收到bin-lo日誌內容,將bin-log日誌內容寫入relay-log中繼日誌,創建一個master.info的文件,該文件記錄了master ip 用戶名 密碼 master bin-log名稱,bin-log position。slave端開啓SQL線程,實時監控relay-log日誌內容是否有更新,解析文件中的SQL語句,在slave數據庫中去執行。那什麼是半同步複製,又是哪個版本開始支持的呢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章