1. 程式人生 > 其它 >Mysql的事務日誌執行

Mysql的事務日誌執行

Mysql的事務特性(原子性,一致性,隔離性,永續性)

事務的執行依靠日誌,事務執行時,日誌先執行

事務提交的流程

提交事務
日誌刷盤
資料刷盤
寫cpk(資料校驗)

事務提交的時候。會有兩個日誌檔案

redo 重做日誌

   記錄我們提交的事務,事務提交後,假如斷電了,沒有來的及寫入磁碟,mysql 重啟就會執行redo log

undo 回滾日誌

  異常,錯誤,手動回滾寫入

  回滾日誌會寫入一條相反的語句到日誌 update/相反的update ,insert 寫入一條deete等

注:事務如果沒有提交commit ,就會等待,超出事務最大執行時間,就會異常。事務執行完畢以後,mysql不會再去執行undo(回滾日誌)

事務開啟的時候,我們進行資料庫操作,首先會建立一個日誌檔案,會記錄該事務一個lns序列號,當執行事務的時候,會往innodb_log_bufferri日誌快取區插入事務日誌(redo),當事務提交時會將日誌快取區裡面的事務日誌刷入磁碟,這個動作主要有innodb_flush_log_at_trx_commit來進行控制

使用事務也會影響效能:控制提交時間

日誌寫入時間可以通過innodb_flush_log_at_trx_commit 函式來進行設定 0 1 2 三個值

引數mysql內預設為1

0 代表事務提交以後,隔一秒寫入快取日誌內部,在隔一秒寫入磁碟檔案 。開銷小,容易出現數據丟失,比如忽然斷電,資料沒有寫入磁碟,伺服器重啟後無法進行回滾日誌進行資料恢復

1 代表實時寫入,直接寫入日誌與磁碟,開銷大,資料不會出現丟失的情況

2 事務提交以後,直接寫入快取日誌,再隔一秒寫入磁碟檔案,折中方案