天天看點

你還精通MySQL,竟然連bin log、redo log都不知道!

雲栖号資訊:【 點選檢視更多行業資訊

在這裡您可以找到不同行業的第一手的上雲資訊,還在等什麼,快來!

首先,我們先來看看一次查詢/更新語句流程圖

你還精通MySQL,竟然連bin log、redo log都不知道!

本文會将重點放在執行器<->存儲引擎之間的互動。

mysql不是每次資料更改都立刻寫到磁盤,而是會先将修改後的結果暫存在記憶體中,當一段時間後,再一次性将多個修改寫到磁盤上,減少磁盤io成本,同時提高操作速度。

MySQL通過WAL(write-ahead logging)技術保證事務

在同一個事務中,每當資料庫進行修改資料操作時,将修改結果更新到記憶體後,會在redo log添加一行記錄記錄“需要在哪個資料頁上做什麼修改”,并将該記錄狀态置為prepare,等到commit送出事務後,會将此次事務中在redo log添加的記錄的狀态都置為commit狀态,之後将修改落盤時,會将redo log中狀态為commit的記錄的修改都寫入磁盤。

過程如下圖

你還精通MySQL,竟然連bin log、redo log都不知道!

redo log記錄方式

redolog的大小是固定的,在mysql中可以通過修改配置參數innodb_log_files_in_group和innodb_log_file_size配置日志檔案數量和每個日志檔案大小,redolog采用循環寫的方式記錄,當寫到結尾時,會回到開頭循環寫日志。

如下圖

你還精通MySQL,竟然連bin log、redo log都不知道!

write pos表示日志目前記錄的位置,當ib_logfile_4寫滿後,會從ib_logfile_1從頭開始記錄;check point表示将日志記錄的修改寫進磁盤,完成資料落盤,資料落盤後checkpoint會将日志上的相關記錄擦除掉,即write pos->checkpoint之間的部分是redo log空着的部分,用于記錄新的記錄,checkpoint->write pos之間是redo log待落盤的資料修改記錄。關注公衆号Java面試那些事兒,回複關鍵字面試,領取大廠最新面試題。當writepos追上checkpoint時,得先停下記錄,先推動checkpoint向前移動,空出位置記錄新的日志。

有了redo log,當資料庫發生當機重新開機後,可通過redo log将未落盤的資料恢複,即保證已經送出的事務記錄不會丢失。

有了redo log,為啥還需要binlog呢?

1、redo log的大小是固定的,日志上的記錄修改落盤後,日志會被覆寫掉,無法用于資料復原/資料恢複等操作。

2、redo log是innodb引擎層實作的,并不是所有引擎都有。

基于以上,binlog必不可少。

1、binlog是server層實作的,意味着所有引擎都可以使用binlog日志

2、binlog通過追加的方式寫入的,可通過配置參數max_binlog_size設定每個binlog檔案的大小,當檔案大小大于給定值後,日志會發生滾動,之後的日志記錄到新的檔案上。

3、binlog有兩種記錄模式,statement格式的話是記sql語句, row格式會記錄行的内容,記兩條,更新前和更新後都有。

binlog和redo log必須保持一緻,不允許出現binlog有記錄但redolog沒有的情況,反之亦然。之前說過在一個事務中,redolog有prepare和commit兩種狀态,是以,在redolog狀态為prepare時記錄binlog可保證兩日志的記錄一緻,下圖列出各種情況來說明。

你還精通MySQL,竟然連bin log、redo log都不知道!

現在我們再來看看整個完整的流程圖

你還精通MySQL,竟然連bin log、redo log都不知道!

相關參數設定建議:

1、innodb_flush_log_at_trx_commit:設定為1,表示每次事務的redolog都直接持久化到磁盤(注意是這裡指的是redolog日志本身落盤),保證mysql重新開機後資料不丢失。

2、sync_binlog:設定為1,表示每次事務的binlog都直接持久化到磁盤(注意是這裡指的是binlog日志本身落盤),保證mysql重新開機後binlog記錄是完整的。

【雲栖号線上課堂】每天都有産品技術專家分享!

課程位址:

https://yqh.aliyun.com/zhibo

立即加入社群,與專家面對面,及時了解課程最新動态!

【雲栖号線上課堂 社群】

https://c.tb.cn/F3.Z8gvnK

原文釋出時間:2020-06-04

本文作者: Mr林_月生

本文來自:“

網際網路架構師 微信公衆号

”,了解相關資訊可以關注“

網際網路架構師