mysql 日記 mysql之日誌

2021-10-17 15:16:33 字數 1657 閱讀 1814

我是李福春,我在準備面試,今天的題目是:

mysql的redolog和binlog有什麼區別?

答: 如下面的**,

然後我們擴充套件一下,因為日誌主要是記錄的修改日誌,分別加深分析一下:

redolog

redolog是innodb儲存引擎特有的物理日誌,記錄的是資料頁做了什麼改動。

它的儲存空間是固定的,類似乙個圓環。日誌空間寫完,需要把相關的操作執行,資料刷到磁碟上釋放空間。

redolog可以有效保證mysql的crash-safe; 即mysql系統故障重啟,也可以從redolog中恢復;

一般把innodb_flush_log_at_trx_commit=1,即設定redolog每次事務提交日誌落盤,可以更有效的保證crash-safe

binlog

是一種mysql-server層的邏輯修改日誌,有兩種格式:

1,statement格式,記錄的是sql;

2, row格式,記錄了兩行,更新前和更新後的結果;

為了保證系統可以從奔潰狀態恢復,設定引數 sync_binlog=1,即事務提交,binlog落盤;

如何快速恢復mysql:

1,找到最近的備份,恢復到臨時庫;

2,找到備份的binlog,重放到你需要的時刻。

一條update語句歷程

比如有一張表:

user(id int primarykey auto_increment ,  age int default 0 )engin=innodb ;

執行一條sql語句:

update user set age=age+1 where id=2 ;

那麼,這條update語句是如何經過mysql的體系結構和日誌檔案呢?

1,執行器首先通過儲存引擎讀介面得到這行資料;(如果記憶體有則返回,不存在從硬碟中取出放入記憶體再返回)

2,執行器把這行資料的age+1,然後呼叫儲存引擎的寫介面,寫入資料到記憶體;

3,儲存引擎把更新操作寫入redolog,日誌狀態為prepare ,告訴執行器事務完成更新操作;

4,  執行器把這個操作寫入binlog,日誌落盤;

5,執行器提交事務,呼叫儲存日誌寫到redolog,日誌狀態為commit,

binlog,redolog都可以表示事務的狀態;

兩階段提交:保證了binlog,redolog在系統奔潰重啟之後的事務狀態的一致;

小結本篇分析了redolog和binlog的區別。

然後分別介紹了binlog,redolog所處的mysql的體系結構位置,實際運維過程中的配置引數。

最後追蹤了一條update語句的執行歷程,以及兩種日誌的寫入過程,然後點明兩階段提交是為了保證兩種日誌的事務一致性。

mysql日誌恢復 Mysql之日誌恢復

對於mysql,每一步操作都會有相應記錄,如insert,update,delete drop alter等相關ddl或dml操作。有時難免會出錯,但在出錯時如何恢復以復原資料。例如,現在有這些資料 但被我truncate了。需要緊急恢復。首先,確保開啟了binlog輸出 然後,找到當前日誌檔案,使...

Mysql系列之 日誌

tip 生活不易,碼農辛苦 我是小刀,在網際網路中夾縫求生 我希望你開心 redo log 重做日誌 和binlog 歸檔日誌 redo log 像一塊 粉板 更新的時候,先寫到 redo log 和記憶體裡,這次更新就算是結束了。等到合適的時機再寫到磁碟裡,大大減小了寫磁碟的次數。redo log...

MySQL歷史更新 mysql之日誌

我是李福春,我在準備面試,今天的題目是 mysql的redolog和binlog有什麼區別?答 如下面的 redolog vs binlog 然後我們擴充套件一下,因為日誌主要是記錄的修改日誌,分別加深分析一下 redolog redolog是innodb儲存引擎特有的物理日誌,記錄的是資料頁做了什...