MySql實戰之MySql的日誌模塊

MySQL的日誌模塊: 
    1. redo log的概念是什麼? 爲什麼會存在?
    redo log 是innidb引擎自有的, 先把操作寫進日誌, 防止數據庫發生異常重啓,保證安全崩潰
    2. 什麼是WAL(write-ahead log)機制, 好處是什麼?
    WAL機制: 預寫日誌機制, 先寫日誌在寫磁盤
    3. redo log 爲什麼可以保證crash safe機制?
    預寫日誌機制, 先寫入操作到日誌中並更新到內存中, 當redolog不足在刷新內存中的記錄到磁盤中
    4. binlog的概念是什麼, 起到什麼作用, 可以做crash safe嗎?
    binlogs 是mysql的server層實現的, 所有引擎都可以使用,採用追加寫的方式, 只是用於做歸檔操作, 並不能保證安全崩潰
    5. binlog和redolog的不同點有哪些?
    redolog 採用循環寫,記錄的是物理日誌, innodb引擎特有的;  binlog採用的追加寫, 記錄的是邏輯日誌
    6. 物理一致性和邏輯一直性各應該怎麼理解?
    物理日誌 redolog(InnoDB引擎自有): 記錄的是在某個數據頁上做了什麼修改
    邏輯日誌 binlog: 記錄的是這個語句的原始邏輯, 比如給ID=2這一行的字段+1; 
    7. 執行器和innoDB在執行update語句時候的流程是什麼樣的?
    update set k=k+1 where table id=2 ;
        1:執行器先找引擎id=2這一行, id 是主鍵 引擎通過數搜索找到這一行,如果這一行的數據頁在內存中直接返回給執行器,否則讀取磁盤在寫入到內存中返回給執行器;
        2: 執行器拿到數據把值+1 得到新的一行數據,再調用引擎接口寫入這行新數據
        3: 引擎將這樣數據更新到內存中, 同時將記錄更新到redolog中,此時redolog 處於準備階段, 然後告訴執行器執行完成, 隨時可以提交事務
        4: 執行器生成binlog 並且把binlog寫入磁盤中
        5:執行器調用引擎的提交事務接口,引擎把剛剛寫入的 redo log 改成提交狀態,更新完成
    8. 如果數據庫誤操作, 如何執行數據恢復?
        找到數據的備份,從備份數據恢復到臨時庫中,從備份的時間點開始,將備份的binlog依次取出來,重放到中午誤刪表之前的那個時刻
    9. 什麼是兩階段提交, 爲什麼需要兩階段提交, 兩階段提交怎麼保證數據庫中兩份日誌間的邏輯一致性(什麼叫邏輯一致性)?
        自行百度,涉及到二階段提交的缺點和三階段提交的優點;
    10. 如果不是兩階段提交, 先寫redo log和先寫bin log兩種情況各會遇到什麼問題?
        先寫redolog binlog沒寫完的情況下, 因爲redolog是有安全崩潰機制的,異常重啓之後仍可以恢復,但是binlog中不存在記錄 
        如果在 binlog 寫完之後 crash,由於 redo log 還沒寫,崩潰恢復以後這個事務無效,但是binlog中已經記錄了日誌, 用binlog恢復就會多出一個事務
   

參考文獻 : 極客時間中林曉斌老師的Mysql實戰45講

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