亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

事務(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 存儲(chǔ)引擎可將所有數(shù)據(jù)存放于 ibdata* 的共享表空間,也可將每張表存放于獨(dú)立的 .ibd 文件的獨(dú)立表空間;

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

redo log => ib_logfile0…
undo log => ibdata

重做日志

持久化

事務(wù)被提交,數(shù)據(jù)一定會(huì)被寫(xiě)入到數(shù)據(jù)庫(kù)中并持久存儲(chǔ)起來(lái),通常來(lái)說(shuō)當(dāng)事務(wù)已經(jīng)被提交之后,就無(wú)法再次回滾了。

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

與原子性一樣,事務(wù)的持久性也是通過(guò)日志來(lái)實(shí)現(xiàn)的,MySQL 使用重做日志( redo log )實(shí)現(xiàn)事務(wù)的持久性,重做日志由兩部分組成,一是內(nèi)存中的重做日志緩沖區(qū),因?yàn)橹刈鋈罩揪彌_區(qū)在內(nèi)存中,所以它是易失的;另一個(gè)就是在磁盤(pán)上的重做日志文件,它是持久的。

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

重做日志執(zhí)行

在MySQL中事務(wù)執(zhí)行 commit 提交了之后,但是服務(wù)器宕機(jī)了,數(shù)據(jù)還沒(méi)有寫(xiě)入磁盤(pán),在MySQL重啟服務(wù)之后會(huì)重新執(zhí)行這個(gè)重做日志寫(xiě)入數(shù)據(jù)。

回滾日志

原子性

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

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

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

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

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

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

回滾日志執(zhí)行

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

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

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

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

啟動(dòng)成功,然后查詢(xún)一下數(shù)據(jù):

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

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

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

發(fā)生錯(cuò)誤或者需要回滾的事務(wù)能夠成功回滾(原子性)。在事務(wù)提交后,數(shù)據(jù)沒(méi)來(lái)得及寫(xiě)入磁盤(pán)就宕機(jī)時(shí),在下次重新啟動(dòng)后能夠成功恢復(fù)數(shù)據(jù)(持久性)。

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

總結(jié) 

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

相關(guān)文章

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

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

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

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

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

    RR與RC隔離級(jí)別下索引和鎖的測(cè)試腳本示例代碼

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

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

    聚焦數(shù)據(jù)庫(kù)擴(kuò)容與實(shí)時(shí)數(shù)據(jù)同步,探索MyCat分庫(kù)分表與GreatSQL的強(qiáng)大結(jié)合!想在大規(guī)模數(shù)據(jù)處理中游刃有余?本指南將帶你輕松掌握MyCat的分布式解決方案和GreatSQL的實(shí)時(shí)同步機(jī)制,讓高效、穩(wěn)定的數(shù)據(jù)庫(kù)管理觸手可及,一起揭開(kāi)高并發(fā)環(huán)境下數(shù)據(jù)庫(kù)優(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)化技巧,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • 淺談mysql 系統(tǒng)用戶(hù)最大文件打開(kāi)數(shù)限制

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

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

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

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

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

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

    mysql定時(shí)備份shell腳本和還原的示例

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

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

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

最新評(píng)論