欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL 日志相關(guān)知識(shí)總結(jié)

 更新時(shí)間:2021年02月02日 16:04:00   作者:Joe學(xué)習(xí)生活  
這篇文章主要介紹了MySQL 日志相關(guān)知識(shí)總結(jié),幫助大家更好的理解和實(shí)用MySQL,感興趣的朋友可以了解下

數(shù)據(jù)庫(kù)中用于存儲(chǔ)數(shù)據(jù)的文件稱為data file,日志文件稱為log file。此外,如果每次讀寫都是直接訪問(wèn)磁盤,性能很差,所以數(shù)據(jù)庫(kù)是有緩存的,數(shù)據(jù)緩存是data buffer,日志緩存log buffer。

sql執(zhí)行順序

當(dāng)我們執(zhí)行一條更新語(yǔ)句時(shí),比如 update table set c=c+1 where id = 2,執(zhí)行順序如下:

  • 執(zhí)行器通過(guò)存儲(chǔ)引擎獲取id=2的行記錄。如果id=2的行記錄所在的數(shù)據(jù)頁(yè)已經(jīng)在內(nèi)存中,則直接返回;否則,需要從磁盤讀取數(shù)據(jù)
  • 執(zhí)行器拿到返回的行數(shù)據(jù),把字段c的值+1,得到新的行數(shù)據(jù),然后調(diào)用存儲(chǔ)引擎接口寫入行數(shù)據(jù)
  • 引擎把這行數(shù)據(jù)更新到內(nèi)存,同時(shí)將這個(gè)更新操作記錄到redo log里面,此時(shí)redo log處于prepare狀態(tài)。然后告訴執(zhí)行器執(zhí)行完成,隨時(shí)可以提交事務(wù)
  • 執(zhí)行器生成這個(gè)操作的bin log,并把bin log寫入磁盤
  • 執(zhí)行器調(diào)用引擎的提交事務(wù)接口,引擎把剛剛寫入的redo log改成commit狀態(tài),更新完成

補(bǔ)充:MySQL的基本存儲(chǔ)結(jié)構(gòu)是頁(yè)(記錄都存在頁(yè)里邊),所以MySQL是先把這條記錄所在的頁(yè)找到,然后把該頁(yè)加載到內(nèi)存中,再修改對(duì)應(yīng)的記錄。

bin log

是什么

bin log稱為歸檔日志、二進(jìn)制日志,屬于MySQL Server層面的,用于記錄數(shù)據(jù)庫(kù)表結(jié)構(gòu)和表數(shù)據(jù)的變更,可以簡(jiǎn)單理解為存儲(chǔ)每條變更的sql語(yǔ)句,比如insert、delete、update(當(dāng)然,不僅是sql,還有事務(wù)id,執(zhí)行時(shí)間等等)。

什么時(shí)候產(chǎn)生

事務(wù)提交的時(shí)候,一次性將事務(wù)中的sql語(yǔ)句按照一定格式記錄到bin log

有什么用

主要有兩個(gè)作用:主從復(fù)制和恢復(fù)數(shù)據(jù)

  • 目前大部分?jǐn)?shù)據(jù)庫(kù)架構(gòu)都是一主多從,從服務(wù)器通過(guò)訪問(wèn)主服務(wù)器的bin log,保證數(shù)據(jù)一致性
  • bin log記錄數(shù)據(jù)庫(kù)的變更,可以通過(guò)它恢復(fù)數(shù)據(jù)

什么時(shí)候落盤

區(qū)分innodb_flush_log_at_trx_commit和sync_binlog

​ 二進(jìn)制日志取決于sync_binlog參數(shù)

  • 0:事務(wù)提交后,由操作系統(tǒng)決定什么時(shí)候把緩存刷新到磁盤(性能最好,安全性最差)
  • 1:每提交一次事務(wù),調(diào)用一次fsync將緩存寫入到磁盤(安全性最好,性能最差)
  • n:當(dāng)提交n次事務(wù)后,調(diào)用一次fsync將緩存寫入到磁盤

文件記錄模式

bin log有三種文件記錄模式,分別是row、statement、mixed

  • row(row-based replication,PBR):記錄每一行數(shù)據(jù)的修改情況

優(yōu)點(diǎn):能夠清楚記錄每行數(shù)據(jù)修改細(xì)節(jié),能夠完全保證主從數(shù)據(jù)一致性
缺點(diǎn):批量操作時(shí)會(huì)產(chǎn)生大量的日志,比如alter table

  • statement:記錄每條修改數(shù)據(jù)的sql,可認(rèn)為sql語(yǔ)句復(fù)制

優(yōu)點(diǎn):日志數(shù)據(jù)量小,減少磁盤IO,提高存儲(chǔ)和恢復(fù)速度
缺點(diǎn):在某些情況下會(huì)出現(xiàn)主從不一致,比如sql語(yǔ)句中包含**now()**等函數(shù)

  • mixed:上面兩種模式的混合,MySQL會(huì)根據(jù)sql語(yǔ)句選擇寫入模式,一般使用statement模式保存bin log,對(duì)于statement模式無(wú)法復(fù)制的操作,使用row模式保存bin log。

redo log

是什么

redo log稱為重做日志,屬于InnoDB存儲(chǔ)引擎層的日志,記錄物理頁(yè)的修改信息,而不是某一行或幾行修改成什么樣

什么時(shí)候產(chǎn)生

事務(wù)開始,就會(huì)寫入redo log。redo log寫入到磁盤并不是隨著事務(wù)提交才寫入,而是在事務(wù)執(zhí)行過(guò)程中,就已經(jīng)寫入到磁盤

有什么用

可用于恢復(fù)數(shù)據(jù)。redo log是在事務(wù)開始后就寫入到磁盤,且是順序IO,寫入速度較快。如果服務(wù)器突然掉電,InnoDB引擎會(huì)使用redo log把數(shù)據(jù)庫(kù)恢復(fù)到掉電前的時(shí)刻,保證數(shù)據(jù)的完整性

什么時(shí)候落盤

InnoDB先把日志寫到緩沖區(qū)(log buffer),然后再把日志從log buffer刷到os buffer,最后調(diào)用文件系統(tǒng)的fsync函數(shù)將日志刷新到磁盤。重做日志寫入時(shí)機(jī)由參數(shù)innodb_flush_log_at_trx_commit決定

  • 0:每秒一次,把log buffer寫入os buffer,并調(diào)用fsync刷到磁盤
  • 1:每次提交事務(wù)時(shí),把log buffer寫入os buffer,并調(diào)用fsync刷到磁盤
  • 2:每次提交事務(wù)時(shí),只是寫入到os buffer,然后每秒一次調(diào)用fsync將日志刷新到磁盤

一般取值為2,因?yàn)榧词筂ySQL宕機(jī),數(shù)據(jù)也沒(méi)有丟失。只有整個(gè)服務(wù)器掛了,才損失1秒的數(shù)據(jù)

bin log VS redo log

看了以上的介紹,感覺bin log和redo log很像,都是記錄數(shù)據(jù)變更,可用于恢復(fù)。其實(shí),它們還是有明顯區(qū)別的。

  • bin log屬于MySQL Server層面的,redo log屬于InnoDB存儲(chǔ)引擎層面
  • bin log是邏輯日志,記錄的是sql語(yǔ)句的原始邏輯;redo log是物理日志,記錄的是物理頁(yè)面更新的內(nèi)容
  • bin log是追加寫,文件達(dá)到限制后會(huì)更換下個(gè)文件,不會(huì)覆蓋;redo log是循環(huán)寫,文件大小固定,寫滿就重頭開始寫,覆蓋原來(lái)的內(nèi)容
  • bin log作用是主從復(fù)制和恢復(fù)數(shù)據(jù),當(dāng)數(shù)據(jù)庫(kù)被刪除、或者從庫(kù)同步主庫(kù)數(shù)據(jù)時(shí),由于bin log記錄變更數(shù)據(jù)的sql,所以可通過(guò)bin log恢復(fù)。而redo log作用是持久化,當(dāng)發(fā)生服務(wù)器宕機(jī)或者掉電等情況,數(shù)據(jù)丟失,可以通過(guò)redo log恢復(fù)。
  • bin log是提交事務(wù)時(shí)才寫入磁盤,而redo log在開啟事務(wù)時(shí),就開始寫入到磁盤

如果整個(gè)數(shù)據(jù)庫(kù)被刪除,可以通過(guò)redo log恢復(fù)嗎?

不行!因?yàn)閞edo log側(cè)重點(diǎn)是保存某次事務(wù)的數(shù)據(jù)變更,當(dāng)內(nèi)存中的數(shù)據(jù)刷到磁盤后,redo log的數(shù)據(jù)其實(shí)已經(jīng)沒(méi)有參考價(jià)值。此外,redo log會(huì)覆蓋歷史數(shù)據(jù),也不可能通過(guò)它來(lái)恢復(fù)所有數(shù)據(jù)。

undo log

詳細(xì)分析MySQL事務(wù)日志

是什么

undo log稱為回滾日志,屬于InnoDB存儲(chǔ)引擎層,是邏輯日志,記錄每行數(shù)據(jù)。當(dāng)我們變更數(shù)據(jù)時(shí),就會(huì)產(chǎn)生undo log,可以認(rèn)為insert一條數(shù)據(jù),undo log會(huì)記錄一條對(duì)應(yīng)的delete日志,反之亦然。

什么時(shí)候產(chǎn)生

在事務(wù)開始前,將當(dāng)前版本生成undo log

有什么用

主要作用:提供回滾和多版本并發(fā)控制(MVCC)

  • 回滾:當(dāng)需要rollback時(shí),從undo log的邏輯記錄讀取相應(yīng)的內(nèi)容進(jìn)行回滾
  • MVCC:undo log記錄中存儲(chǔ)的是舊版本數(shù)據(jù),當(dāng)一個(gè)事務(wù)需要讀取數(shù)據(jù)時(shí),會(huì)順著undo鏈找到滿足其可見性的記錄

以上就是MySQL 日志相關(guān)知識(shí)總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于MySQL 日志的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • centos下mysql主從同步快速設(shè)置步驟分享

    centos下mysql主從同步快速設(shè)置步驟分享

    記錄一個(gè)比較簡(jiǎn)便的mysql的主從同步設(shè)置步驟,方便日后使用。
    2012-06-06
  • MySQL 使用規(guī)范總結(jié)

    MySQL 使用規(guī)范總結(jié)

    MySQL已經(jīng)成為世界上最受歡迎的數(shù)據(jù)庫(kù)管理系統(tǒng)之一,無(wú)論是用在小型開發(fā)項(xiàng)目上,還是用在構(gòu)建那較大型的網(wǎng)站,MySQL都用實(shí)力證明了自己是一個(gè)穩(wěn)定、可靠、快速、可信的系統(tǒng),足以勝任任何數(shù)據(jù)存儲(chǔ)業(yè)務(wù)的需要。本文總結(jié)了MySQL的使用規(guī)范
    2020-09-09
  • mysql 5.7.24 安裝配置方法圖文教程

    mysql 5.7.24 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.24 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • MySQL更新,刪除操作分享

    MySQL更新,刪除操作分享

    這篇文章主要介紹了MySQL更新,刪除操作分享,文章根據(jù)MySQL的更新刪除命令的相關(guān)資料展開詳細(xì)的介紹,需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2022-03-03
  • MySQL 性能優(yōu)化的最佳20多條經(jīng)驗(yàn)分享

    MySQL 性能優(yōu)化的最佳20多條經(jīng)驗(yàn)分享

    今天,數(shù)據(jù)庫(kù)的操作越來(lái)越成為整個(gè)應(yīng)用的性能瓶頸了,這點(diǎn)對(duì)于Web應(yīng)用尤其明顯。關(guān)于數(shù)據(jù)庫(kù)的性能,這并不只是DBA才需要擔(dān)心的事,而這更是我們程序員需要去關(guān)注的事情。
    2010-07-07
  • mysql 查詢數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程與函數(shù)的語(yǔ)句

    mysql 查詢數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程與函數(shù)的語(yǔ)句

    mysql 查詢數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程與函數(shù)的語(yǔ)句,需要的朋友可以參考下。
    2011-05-05
  • bitronix 連接 MySQL 出現(xiàn)MySQLSyntaxErrorException 的解決方法

    bitronix 連接 MySQL 出現(xiàn)MySQLSyntaxErrorException 的解決方法

    這篇文章主要介紹了bitronix 連接 MySQL 出現(xiàn)MySQLSyntaxErrorException 的解決方法的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • mysql之觸發(fā)器使用

    mysql之觸發(fā)器使用

    這篇文章主要介紹了mysql之觸發(fā)器使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2017-09-09
  • net?start?mysql服務(wù)名無(wú)效的三種解決方法

    net?start?mysql服務(wù)名無(wú)效的三種解決方法

    這篇文章主要介紹了net?start?mysql服務(wù)名無(wú)效的三種解決方法,通過(guò)圖文結(jié)合的方式講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-08-08
  • MySQL 導(dǎo)入慢的解決方法

    MySQL 導(dǎo)入慢的解決方法

    MySQL導(dǎo)出的SQL語(yǔ)句在導(dǎo)入時(shí)有可能會(huì)非常非常慢,在導(dǎo)出時(shí)合理使用幾個(gè)參數(shù),可以大大加快導(dǎo) 入的速度。
    2010-12-12

最新評(píng)論