關於MySQL復原機制

來源:互聯網
上載者:User

標籤:

在事務中,每個正確的原子操作都會被順序執行,直到遇到錯誤的原子操作,此時事務會將之前的操作進行復原。復原的意思是如果之前是插入操作,那麼會執行刪 除插入的記錄,如果之前是update操作,也會執行update操作將之前的記錄還原

因此,正確的原子操作是真正被執行過的。是物理執行。

在當前事務中確實能看到插入的記錄。最後只不過刪除了。但是AUTO_INCREMENT不會應刪除而改變值。

1、為什麼auto_increament沒有復原?

因為innodb的auto_increament的計數器記錄的當前值是儲存在存記憶體中的,並不是存在於磁碟上,當mysql server處於啟動並執行時候,這個計數值只會隨著insert改增長,不會隨著delete而減少。而當mysql server啟動時,當我們需要去查詢auto_increment計數值時,mysql便會自動執行:SELECT MAX(id) FROM 表名 FOR UPDATE;語句來獲得當前auto_increment列的最大值,然後將這個值放到auto_increment計數器中。所以就算 Rollback MySQL的auto_increament計數器也不會作負運算。

2、MySQL的事務對錶操作的時候是否是物理操作?

MySQL的事務是有redo和undo的,redo操作的所有資訊都是記錄到 redo_log中,也就是說當一個事務做commit操作時,需要先把這個事務的操作寫到redo_log中,然後再把這些操作flush到磁碟上,當 出現故障時,只需要讀取redo_log,然後再重新flush到磁碟就行了。

而對於undo就比較麻煩,MySQL在處理事務時,會在資料共用 資料表空間裡申請一個段叫做segment段,用儲存undo資訊,當在處理rollback,不是完完全全的物理undo,而是邏輯undo,就是說會對之 前的操作進行反操作,但是這些共用資料表空間是不進行回收的。這些資料表空間的回收需要由mysql的master thread進程來進行回收。

關於MySQL復原機制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.