MySql中innodb儲存引擎事務日誌詳解

2022-09-23 07:27:12 字數 892 閱讀 2470

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

MYSQL 5 6中禁用INNODB引擎

並不是所有人都需要innodb引擎,雖然它彌補了mysql缺乏事務支援的毛病,但是它的磁碟效能一直是讓人比較擔憂的。 另外比較老的php系統...

MySQL中InnoDB和MyISAM引擎的對比

我們這裡關注b 樹的兩個特性 葉子節點包含資料data data並不特指資料庫中的某一行資料,也可以是某個數值,指標等 以使用者表為例,id為主鍵,另外name存在索引idx name create table t user id bigint name varchar 10 age int prim...