中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql中有哪些日志

發布時間:2021-07-13 15:24:57 來源:億速云 閱讀:206 作者:Leah 欄目:大數據

這篇文章將為大家詳細講解有關Mysql中有哪些日志,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

redo log

        重做日志,是在binlog之上,一條update語句執行時,首先會記錄一條redo log,然后再由執行器生成binlog日志,redo log是InnoDB存儲引擎層的日志。
問題1.redo log 的意義
        首先redolog 在最開始的MySQL 存儲引擎MyISAM中是沒有的,后來由第三方公司開發的插件,也就是INNODB的前身,之后才有Innodb存儲引擎,所以redolog是innodb所特有的日志,他的目的是幫助mysql快速記錄變更的記錄,并且保持數據一直性。所以在MYsql中每次更新和插入數據都需要進行磁盤的存儲,這樣IO的成本太高,所以為了優化mysql的實時需要刷盤的問題,Innodb采用了先寫日志,和更新緩存,然后在機器空閑的時候寫入磁盤,這樣就就有了redo日志。
問題2:redo 日志的好處?
        redo log可以防止mysql數據庫異常重啟時,可以快速恢復redo log中的數據,將之前已經提交的事務數據恢復到內存中。這也就是mysql的crash-self能力。還有就是redo log相當于一個緩存,先寫到緩存,然后再持久化到磁盤,速度相對比較快。
問題3:加入了redo log ,數據一致性如何保證?
         有了redo log,binlog寫入失敗怎么辦,所以這就設置到單機一致性問題,一般的我們知道XA協議,就是兩階段提交,在這里也是同樣的處理方式。下面有一個簡單update語句執行的流程,我們就知道redo log和binlog的寫入時機,和數據恢復問題。

 

binlog

binlog有三種格式:Statement、Row以及Mixed

–基于SQL語句的復制(statement-based replication,SBR),
–基于行的復制(row-based replication,RBR),
–混合模式復制(mixed-based replication,MBR)。


 

mysql innodb update 執行流程

1.執行器首先找數據引擎查詢需要操作的行,如果該數據所在的數據頁就在內存中,則直接返回給執行器,否則需要從磁盤中讀取數到內存中,在返回。
2.執行器將操作后待更新的數據調用執行引擎寫入新的行數據
3.引擎先更新到內存,同時將更新操作記錄到redo log,此時redo log 處于一個準備階段,然后告訴執行器,執行完成,隨時可以提交事務
4.執行器生成這個操作的binlog,并將binlog寫入磁盤
5.執行器調用事務提交接口,引擎把剛剛寫入的redo log 狀態改成提交狀態,整個更新操作就完成了。
從整個步驟可以看出,redo log 和binlog 在一次事務中是需要都成功才會保持一致性的。所謂的系統空閑的時候刷盤和binlog是兩回事,binlog是事務提交同步就要完成的事情。

 

undo log

        undo log有兩個作用:提供回滾和多個行版本控制(MVCC),還有為了實現事務的原子性。

        在數據修改的時候,不僅記錄了redo,還記錄了相對應的undo,如果因為某些原因導致事務失敗或回滾了,可以借助該undo進行回滾。undo log和redo log記錄物理日志不一樣,它是邏輯日志。可以認為當delete一條記錄時,undo log中會記錄一條對應的insert記錄,反之亦然,當update一條記錄時,它記錄一條對應相反的update記錄。當執行rollback時,就可以從undo log中的邏輯記錄讀取到相應的內容并進行回滾。有時候應用到行版本控制的時候,也是通過undo log來實現的:當讀取的某一行被其他事務鎖定時,它可以從undo log中分析出該行記錄以前的數據是什么,從而提供該行版本信息,讓用戶實現非鎖定一致性讀取。undo log是采用段(segment)的方式來記錄的,每個undo操作在記錄的時候占用一個undo log segment。另外,undo log也會產生redo log,因為undo log也要實現持久性保護。

 

innodb-relay.log

        relay logMySQL進行主主復制或主從復制的時候才會出現的日志文件,他本質復制的binlog,然后生成relay log,然后從節點基于該日志進行數據備份。
   MySQL主從復制涉及到三個線程,一個運行在主節點(log dump thread),其余兩個(I/O thread, SQL thread)運行在從節點
       1.主線程binlog dump線程:當從節點連接主節點時,主節點會創建一個log dump 線程,用于發送bin-log的內容。在讀取bin-log中的操作時,此線程會對主節點上的bin-log加鎖,當讀取完成,甚至在發動給從節點之前,鎖會被釋放。
       2.從節點IO線程:當從節點上執行start slave命令之后,從節點會創建一個I/O線程用來連接主節點,請求主庫中更新的bin-log。I/O線程接收到主節點binlog dump 進程發來的更新之后,保存在本地relay-log中。
       3.從節點SQL線程:SQL線程負責讀取relay log中的內容,解析成具體的操作并執行,最終保證主從數據的一致性。


關于Mysql中有哪些日志就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

酒泉市| 股票| 新闻| 阿拉善盟| 怀安县| 逊克县| 勃利县| 姜堰市| 集贤县| 延长县| 绥德县| 永顺县| 晋江市| 英超| 肥东县| 英吉沙县| 洪洞县| 分宜县| 大竹县| 石渠县| 岢岚县| 长兴县| 六枝特区| 厦门市| 揭西县| 浮山县| 卓资县| 云霄县| 察哈| 丽江市| 宝丰县| 集安市| 本溪| 肥城市| 鄂托克旗| 乌拉特后旗| 东至县| 澎湖县| 石首市| 石河子市| 鹿邑县|