欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql中的事務(wù)重做日志(redo log)與回滾日志(undo log)

 更新時間:2023年05月29日 09:36:00   作者:小洪帽i  
這篇文章主要介紹了mysql中的事務(wù)重做日志(redo log)與回滾日志(undo log),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

事務(wù)重做日志(redo log)與回滾日志(undo log)

查看事務(wù)日志:

show engine innodb status;
show engine innodb status\G;

查看日志文件設(shè)置狀態(tài):

show variables like 'innodb_%';

  • innodb_log_files_in_group:DB 中設(shè)置幾組事務(wù)日志,默認(rèn)是2;
  • innodb_log_group_home_dir 事務(wù)日志存放目錄,不設(shè)置;
  • ib_logfile0… 存放在數(shù)據(jù)文件目錄下 InnoDB 存儲引擎可將所有數(shù)據(jù)存放于 ibdata* 的共享表空間,也可將每張表存放于獨立的 .ibd 文件的獨立表空間;

注意:在 MySQL 中對于數(shù)據(jù)來說,最為重要的是日志文件

redo log => ib_logfile0…
undo log => ibdata

重做日志

持久化

事務(wù)被提交,數(shù)據(jù)一定會被寫入到數(shù)據(jù)庫中并持久存儲起來,通常來說當(dāng)事務(wù)已經(jīng)被提交之后,就無法再次回滾了。

重做日志實現(xiàn)持久化

與原子性一樣,事務(wù)的持久性也是通過日志來實現(xiàn)的,MySQL 使用重做日志( redo log )實現(xiàn)事務(wù)的持久性,重做日志由兩部分組成,一是內(nèi)存中的重做日志緩沖區(qū),因為重做日志緩沖區(qū)在內(nèi)存中,所以它是易失的;另一個就是在磁盤上的重做日志文件,它是持久的。

當(dāng)我們在一個事務(wù)中嘗試對數(shù)據(jù)進行寫時,它會先將數(shù)據(jù)從磁盤讀入內(nèi)存,并更新內(nèi)存中緩存的數(shù)據(jù),然后生成一條重做日志并寫入重做日志緩存,當(dāng)事務(wù)真正提交時,MySQL 會將重做日志緩存中的內(nèi)容刷新到重做日志文件,再將內(nèi)存中的數(shù)據(jù)更新到磁盤上,圖中的第4、5步就是在事務(wù)提交時執(zhí)行的。

重做日志執(zhí)行

在MySQL中事務(wù)執(zhí)行 commit 提交了之后,但是服務(wù)器宕機了,數(shù)據(jù)還沒有寫入磁盤,在MySQL重啟服務(wù)之后會重新執(zhí)行這個重做日志寫入數(shù)據(jù)。

回滾日志

原子性

通俗的解釋就是:一條繩子上的螞蚱。

專業(yè)性的解釋是:事務(wù)一系列的操作,要么全部執(zhí)行,要么都不執(zhí)行。

回滾日志實現(xiàn)原子性

想要保證事務(wù)的原子性,就需要在異常發(fā)生時,對已經(jīng)執(zhí)行的操作進行回滾,而在 MySQL 中,恢復(fù)機制是通過回滾日志( undo log )實現(xiàn)的,所有事務(wù)進行的修改都會先記錄到這個回滾日志中,然后再對數(shù)據(jù)庫中的對應(yīng)行進行寫入。

注意:系統(tǒng)發(fā)生崩潰、數(shù)據(jù)庫進程直接被殺死后,當(dāng)用戶再次啟動數(shù)據(jù)庫進程時,還能夠立刻通過查詢回滾日志將之前未完成的事務(wù)進行回滾,這也就需要回滾日志必須先于數(shù)據(jù)持久化到磁盤上,是我們需要先寫日志后寫數(shù)據(jù)庫的主要原因。

在日志文件中:在事務(wù)中使用的每一條 insert into 都對應(yīng)了一條 delete ,每一條 update 也對應(yīng)一條相反的 update 語句。

回滾日志執(zhí)行

  • 1.手動執(zhí)行回滾命令時會執(zhí)行。
  • 2.如果程序在事務(wù)執(zhí)行之后,提交命令執(zhí)行之前出現(xiàn)了異常,在下次 MySQL 服務(wù)重啟的時候會執(zhí)行。

測試:在事務(wù)提交前停止mysql服務(wù)

然后我們停止MySQL服務(wù):

停止成功;然后再開啟 MySQL 服務(wù):

啟動成功,然后查詢一下數(shù)據(jù):

沒有查詢到新增的數(shù)據(jù);數(shù)據(jù)已經(jīng)丟失了,需要執(zhí)行了commit之后數(shù)據(jù)才不會丟失。

重做日志與回滾日志總結(jié)

到現(xiàn)在為止我們了解了 MySQL 中的兩種日志,回滾日志( undo log )和重做日志( redo log );在數(shù)據(jù)庫系統(tǒng)中,事務(wù)的原子性和持久性是由事務(wù)日志( transaction log )保證的,在實現(xiàn)時也就是上面提到的兩種日志;欠著用于對事務(wù)的影響進行撤銷,后者在錯誤處理時對已經(jīng)提交的事務(wù)進行重做,它們能保證兩點:

發(fā)生錯誤或者需要回滾的事務(wù)能夠成功回滾(原子性)。在事務(wù)提交后,數(shù)據(jù)沒來得及寫入磁盤就宕機時,在下次重新啟動后能夠成功恢復(fù)數(shù)據(jù)(持久性)。

在數(shù)據(jù)庫中,這兩種日志經(jīng)常都是一起工作的,我們可以將他們整體看作一條事務(wù)日志,其中包含了事務(wù)的ID、修改的行元素以及修改前后的值。

總結(jié) 

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mysql數(shù)據(jù)庫的日志管理、備份與回復(fù)詳細圖文教程

    Mysql數(shù)據(jù)庫的日志管理、備份與回復(fù)詳細圖文教程

    備份的主要目的是災(zāi)難恢復(fù),備份還可以測試應(yīng)用、回滾數(shù)據(jù)修改、查詢歷史數(shù)據(jù)、審計等,這篇文章主要給大家介紹了關(guān)于Mysql數(shù)據(jù)庫的日志管理、備份與回復(fù)的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-08-08
  • 關(guān)于django連接mysql數(shù)據(jù)庫并進行數(shù)據(jù)庫的創(chuàng)建的問題

    關(guān)于django連接mysql數(shù)據(jù)庫并進行數(shù)據(jù)庫的創(chuàng)建的問題

    這篇文章主要介紹了django連接mysql數(shù)據(jù)庫并進行數(shù)據(jù)庫的創(chuàng)建,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • RR與RC隔離級別下索引和鎖的測試腳本示例代碼

    RR與RC隔離級別下索引和鎖的測試腳本示例代碼

    這篇文章主要給大家介紹了關(guān)于RR與RC隔離級別下索引和鎖的測試腳本的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • 高效數(shù)據(jù)流轉(zhuǎn):Mycat分庫分表與GreatSQL實時同步

    高效數(shù)據(jù)流轉(zhuǎn):Mycat分庫分表與GreatSQL實時同步

    聚焦數(shù)據(jù)庫擴容與實時數(shù)據(jù)同步,探索MyCat分庫分表與GreatSQL的強大結(jié)合!想在大規(guī)模數(shù)據(jù)處理中游刃有余?本指南將帶你輕松掌握MyCat的分布式解決方案和GreatSQL的實時同步機制,讓高效、穩(wěn)定的數(shù)據(jù)庫管理觸手可及,一起揭開高并發(fā)環(huán)境下數(shù)據(jù)庫優(yōu)化的神秘面紗吧!
    2024-01-01
  • MySQL?原理優(yōu)化之Group?By的優(yōu)化技巧

    MySQL?原理優(yōu)化之Group?By的優(yōu)化技巧

    這篇文章主要介紹了MySQL?原理優(yōu)化之Group?By的優(yōu)化技巧,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 淺談mysql 系統(tǒng)用戶最大文件打開數(shù)限制

    淺談mysql 系統(tǒng)用戶最大文件打開數(shù)限制

    這篇文章主要介紹了mysql 系統(tǒng)用戶最大文件打開數(shù)限制,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • mysql中engine=innodb和engine=myisam的區(qū)別介紹

    mysql中engine=innodb和engine=myisam的區(qū)別介紹

    MyISAM類型不支持事務(wù)處理等高級處理,而InnoDB類型支持,本文為大家講解下mysql中engine=innodb和engine=myisam的區(qū)別,不懂的朋友可以學(xué)習(xí)下,希望對大家有所幫助
    2013-07-07
  • mysql連接過多和死掉以及拒絕服務(wù)的解決方法

    mysql連接過多和死掉以及拒絕服務(wù)的解決方法

    mysql連接過多和死掉以及拒絕服務(wù)的解決方法...
    2007-12-12
  • mysql定時備份shell腳本和還原的示例

    mysql定時備份shell腳本和還原的示例

    數(shù)據(jù)庫備份是防止數(shù)據(jù)丟失的一種重要手段,生產(chǎn)環(huán)境中,數(shù)據(jù)的安全性是至關(guān)重要的,任何數(shù)據(jù)的丟失都可能產(chǎn)生嚴(yán)重的后果,所以本文給大家介紹了mysql定時備份shell腳本和還原的實例,需要的朋友可以參考下
    2024-02-02
  • idea連接mysql數(shù)據(jù)庫失敗的幾種解決方案

    idea連接mysql數(shù)據(jù)庫失敗的幾種解決方案

    我們在學(xué)習(xí)Mybatis時需要連接Mysql數(shù)據(jù)庫,使用IDEA無法連接mysql數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關(guān)于idea連接mysql數(shù)據(jù)庫失敗的幾種解決方案,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06

最新評論