MySQL 日誌記錄

前言

最近本身在學習MySQL基礎方面的知識,差很少學習的也有一週多的時間了,進度的話也不是很快。學習的收有個問題,學過的知識很快的就忘記了,這怎麼得了,必須想個辦法。數據庫

一開始是把看到的文章截圖,以爲有用的地方截個屏發到微信上,有時間能夠看一下,結果呢,你是知道的,確定是沒有看了,不只沒有看當天學習的知識,就連之前學習的也忘記的一乾二淨。

後來想到一個比較雞賊的辦法,抄比較優質的留言,把它們當作本身的學習心得,試事後感受還能夠,有些我不理解的地方,看了以後會有點轉機,不想之前那麼晦澀難懂了。這麼騷操做以後,遇到一個新的問題,若是留言沒有涉及到的內容我就不知道,好比每次課後習題我就不會作微信

我以爲本身在學習方法上有很大的問題,若是用一句話來總結,那就是,一看就會,一問舊懵。知識很大層面上仍是停留在我知道這個層面,若是運用這些知識,把這些知識點用到工做生活中是不夠的,我也知道一蹴而就的事情是不太可能辦到的,學習是一件按部就班的事。數據結構

這讓我忽然想到以前在學習數據結構的時候,每學習新的東西,我都會寫一篇文章記錄下來,學了什麼,有什麼感悟,記下來,這在之後回過頭來看這些知識點會特別有感觸,你會發現你容易就想到這些知識,這比你從新去看讀書勾畫的知識點要好一些,由於這是用你本身的話說出來的,有很大的不一樣

言歸正傳

說了這麼多回到今天的主題內容,今天要回顧總結的知識點是MySQL日誌系統,這塊的內容若是要展開見是很複雜的,本身的能力也講不了很深刻,仍是以學習教材爲基礎,在此基礎上結合評論區比較優質的留言,來探討這期學習內容,廢話說的有點多了,咱們如今正式開始學習

怎麼提及這期的內容呢?是一個比較棘手的事情,單單拿出來說以爲有點生硬,展開了講又不會,真的很煩人,誰讓你之前很差好讀書的,這下慘了吧,後悔了吧3d

redo log(重作日誌)

MySQL中的日誌主要涉及到redo log 日誌和binlog日誌,稍後講解binlog日誌日誌

在講解redo log日誌以前先問一個問題,爲何會有redo log日誌呢?excel

在說爲何前,我先講一個發生在我身上的事情,這個件事情大體是這樣的。剛畢業那會兒我在一件天貓店鋪上班,我主要負責的工做是打包快遞,發快遞,和快遞公司對接,快遞費用結算。天天快到下班前就有幾家快遞公司收快遞,這些快遞費用不是立刻結清,每月結算一次,可是天天產生的費用怎麼結算呢,是那個本子急着嘛,不太可能,一開始我也不知道快遞費用是多少,而是快遞小哥根據收貨地點,貨物重量來結算的,一個月下來快遞也有幾千單,節假日有上萬單,這可怎麼好code

那我是如何處理計算天天的快遞費用的呢,並統計和快遞公司月結一次。每一個快遞單我都會保留着,這上面不只有收發信息,還有這件快遞的費用,每到發完快遞的時候,我都將全部的快遞費用記錄到excel表中,到了快月結快遞費用的時候,就把上次結算到如今的快遞算一下,總共好多單,好多費用。這樣我不只能夠和快遞公司結算帳目,還能夠回頭查看每單的費用,即使快遞公司這個月不結算費用,也能夠在下個月結算cdn

我說了這麼多和redo log有什麼關係嘛,有的,那就是MySQL每次產生的記錄不會寫入到磁盤中,而是先記錄在redo log中,在不忙的時候再刷入到磁盤blog

若是每一次的更新操做都將寫進磁盤,而後磁盤再找到那條記錄進行過更新,整個I/O操做成本是很高的。爲了不頻繁的I/O操做,將記錄寫入到日誌,而後再持久化到磁盤,這就是預寫式日誌WAL,全稱Write Ahead Logging

具體來講是這樣的,當有一條記錄須要更新的時候,InnoDB引擎會將記錄寫進redo log中,這條記錄更新就算完成了,在系統比較空閒的時候InnoDB會把redo log中的記錄存儲到磁盤

那麼Innodb是如何寫把這條記錄寫入到redo log中的呢? 以及記錄了什麼到redo log中呢? 下面咱們來一探究竟

在說怎麼把記錄寫到redo log前,先說下redo log的一些特性,爲後面的內容作鋪墊,InnoDB 中的redo log是有固定大小,好比每一個文件1GB,4個文件,共有4GB,若是4GB的空間沾滿了就從頭開始寫,因此redo log也叫作重作日誌, 寫滿了要把以前的記錄存儲到磁盤中

上圖中的write pos表示的是當前記錄的位置,一邊寫一邊日後移動,寫到3號文件末尾移到0號文件開頭寫。 checkpoint 是當前要查處的位置,也會一遍擦除記錄一遍日後移動,擦除的記錄要寫進磁盤

若是write pos 追上了checkpoin表示redo log 寫滿了,這個時候須要停下來,擦除一些記錄,把checkpoint推 進一下,擦除 的記錄得寫進數據文件

write pos 到3號文件末尾 ,以及0號文件開頭到checkpoint這兩部分是空閒的,能夠用來寫新的記錄。

有了redo log ,即使數據庫異常重啓,也不會致使數據丟失,這些記錄在redo log中,只要重啓數據庫這些記錄就會存儲到磁盤中,具備這樣的能力稱爲crash-safe

redo log也叫作物理日誌,記錄的是在某個數據頁上作了什麼改動,會將redo log中的記錄持久化到磁盤上。redo log上到底記錄的是什麼呢,具體我也不知道,能夠先這麼理解,redo log記錄的是在某個數據頁上作了什麼修改

其實redo log往深刻講是很複雜的,我這裏只說了redo log的皮毛,也只知道一點皮毛😁。有這種認識是很好的, 不想之前,以爲這個學了,我就懂了吧,我就不用在學習了哦,我真實太有才了,這種沙雕想法。

binlog (歸檔日誌)

相關文章
相關標籤/搜索