詳解MySQL日誌

2021-10-06 04:26:56 字數 1688 閱讀 6657

binlog

redo log與binlog的區別

什麼是undo log

mysql日誌主要有三種

redo log

redo log是mysql的innodb儲存引擎特有的日誌,redo log的作用是用來做持久化的,acid特性的永續性,就是redo log做的,它使得mysql擁有crash-safe能力,也就是即使資料庫發生異常重啟,之前提交的記錄都不會丟失。

當有一條記錄需要更新的時候,他會先把這個更新寫到redo log裡邊,然後再更新記憶體,這樣就算是更新完成了,等到磁碟比較空閒的時候,他再把這個記錄同步到磁碟裡邊。

redo log的大小是固定的,當寫到末尾後又回到開頭迴圈寫,如果寫滿了,那麼這時候不能再執行新的更新,它會停下來先把資料同步到磁碟,進而騰出空間,然後再執行更新操作,這種情況有時候會導致sql語句查詢慢的問題,因為mysql有時會停下其他操作,全身心的去把資料同步到磁碟,然後才執行我們的sql語句

redo log的永續性是怎麼做到的

如果寫入記憶體成功,但資料還沒真正刷到磁碟,如果此時的資料庫掛了,我們可以靠redo log來恢復記憶體的資料,這就實現了永續性

binlog

redo log是innodb儲存引擎的,而在server層也有自己的日誌,也就是binglog,binlog會記錄那些,修改表結構,或者更新表資料的sql語句,(不包括查詢語句),binlog的作用是複製和恢復。

複製

mysql主從複製的原理就是基於binlog,主從伺服器需要保持資料的一致性,通過binlog來同步資料。

恢復

如果整個資料庫的資料都被刪除了,binlog儲存著所有的資料變更情況,那麼可以通過binlog來對資料進行恢復

如果資料庫被刪,基於redo log可以恢復嗎?

不能! ! ! 因為功能的不同,redo log 儲存的是物理資料的變更,如果我們記憶體的資料已經同步到了磁碟,那redo log的資料就無效了。所以redo log不會儲存著歷史所有資料的變更,檔案的內容會被覆蓋的

redo log與binlog的區別

redo log是物理日誌,記錄的是在哪個資料頁上執行了哪些操作,binlog是邏輯日誌,記錄的是sql語句

什麼是undo log

undo log主要有兩個作用:回滾和多版本控制(mvcc)

在資料修改的時候,不僅記錄了redo log,還記錄undo log,如果因為某些原因導致事務失敗或回滾了,可以用undo log進行回滾

undo log主要儲存的也是邏輯日誌,比如我們要insert一條資料了,那undo log會記錄的一條對應的delete日誌。我們要update一條記錄時,它會記錄一條對應相反的update記錄。

這也應該容易理解,畢竟回滾嘛,跟需要修改的操作相反就好,這樣就能達到回滾的目的。因為支援回滾操作,所以我們就能保證:「乙個事務包含多個操作,這些操作要麼全部執行,要麼全都不執行」。【原子性】

因為undo log儲存著修改之前的資料,相當於乙個前版本,mvcc實現的是讀寫不阻塞,讀的時候只要返回前乙個版本的資料就行了。

參考:mysql三種日誌

mysql詳解日誌 MySQL日誌檔案詳解

概述 日誌檔案是mysql資料庫的重要組成部分。mysql有幾種不同的日誌檔案,通常包括錯誤日誌檔案,二進位制日誌,通用日誌,慢查詢日誌,等等。這些日誌可以幫助我們定位mysqld內部發生的事件,資料庫效能故障,記錄資料的變更歷史,使用者恢復資料庫等等。本文主要描述mysql的各種日誌檔案。mysq...

mysql 日誌詳解 MySQL日誌檔案詳解

概述 日誌檔案是mysql資料庫的重要組成部分。mysql有幾種不同的日誌檔案,通常包括錯誤日誌檔案,二進位制日誌,通用日誌,慢查詢日誌,等等。這些日誌可以幫助我們定位mysqld內部發生的事件,資料庫效能故障,記錄資料的變更歷史,使用者恢復資料庫等等。本文主要描述mysql的各種日誌檔案。1.錯誤...

mysql日誌詳解

日誌分類 一 錯誤日誌。1 在配置檔案中的配置是 log error desktop igoodful.err 檢視引數的鍵值對 show variables like log error 二 二進位制日誌。1 記錄了對資料庫執行更改的所有操作,當然不包含select和show的操作。作用有兩個 恢...