innodb事務日誌

2021-08-14 23:36:48 字數 898 閱讀 8252

mysql會最大程度的使用快取機制來提高資料庫的訪問效率,但是萬一資料庫發生斷電,因為快取的資料沒有寫入磁碟,導致快取在記憶體中的資料丟失而導致資料不一致怎麼辦?

innodb主要是通過事務日誌實現acid特性

事務日誌包括:重做日誌redo和回滾日誌undo

redo記錄的是已經全部完成的事務,就是執行了commit的事務,記錄檔案是ib_logfile0 ib_logfile1

undo記錄的是已部分完成並且寫入硬碟的未完成的事務,預設情況下回滾日誌是記錄下表空間中的(共享表空間或者獨享表空間)

一般情況下,mysql在崩潰之後,重啟服務,innodb通過回滾日誌undo將所有已完成並寫入磁碟的未完成事務進行rollback,然後redo中的事務全部重新執行一遍即可恢復資料,但是隨著redo的量增加,每次從redo的第一條開始恢復就會浪費長的時間,所以引入了checkpoint機制

dirty page:髒頁 什麼意思呢?

一般業務執行過程中,當業務需要對某張的某行資料進行修改的時候,innodb會先將該資料從磁碟讀取到快取中去,然後在快取中對這條資料進行修改,這樣快取中的資料就和磁碟的資料不一致了,這個時候快取中的資料就稱為dirty page,只有當髒頁統一重新整理到磁碟中才會是clean page

checkpoint:如果在某個時間點,髒頁的資料被重新整理到了磁碟,系統就把這個重新整理的時間點記錄到redo log的結尾位置,在進行恢復資料的時候,checkpoint時間點之前的資料就不需要進行恢復了,可以縮短時間

innodb_log_buffer_size 重做日誌快取大小

innodb_log_file_size redo log檔案大小  檔案越大 資料恢復的時間越長

innodb_log_file_group redo log檔案數量 預設是2個 ib_logfile0 ib_logfile1

innodb事務日誌ib logfile

mysql的innodb中事務日誌ib logfile 事務日誌或稱redo日誌 在mysql中預設以ib logfile0,ib logfile1名稱存在,可以手工修改引數,調節 開啟幾組日誌來服務於當前mysql資料庫,mysql採用順序,迴圈寫方式,每開啟乙個事務時,會把一些相關資訊記錄事務日...

Innodb日誌與事務

1.innodb日誌 錯誤日誌 記錄出錯資訊,也記錄一些警告資訊或者正確的資訊。查詢日誌 記錄所有對資料庫請求的資訊,不論這些請求是否得到了正確的執行。慢查詢日誌 設定乙個閾值,將執行時間超過該值的所有sql語句都記錄到慢查詢的日誌檔案中。二進位制日誌 記錄對資料庫執行更改的所有操作。中繼日誌 事務...

mysql日誌 innodb事務

1 binlog 歸檔日誌 server所有 sync binlog 表示每次binlog 都同步磁碟 2 redolog innodb儲存引擎特有 innodb flush log at trx commit 1 代表每次redolog都同步到磁碟 3 undolog 組成版本鏈 mvcc und...