最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

事務(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* 的共享表空間,也可將每張表存放于獨(dú)立的 .ibd 文件的獨(dú)立表空間;

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

redo log => ib_logfile0…
undo log => ibdata

重做日志

持久化

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

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

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

當(dāng)我們在一個事務(wù)中嘗試對數(shù)據(jù)進(jìn)行寫時,它會先將數(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ù)器宕機(jī)了,數(shù)據(jù)還沒有寫入磁盤,在MySQL重啟服務(wù)之后會重新執(zhí)行這個重做日志寫入數(shù)據(jù)。

回滾日志

原子性

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

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

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

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

注意:系統(tǒng)發(fā)生崩潰、數(shù)據(jù)庫進(jìn)程直接被殺死后,當(dāng)用戶再次啟動數(shù)據(jù)庫進(jìn)程時,還能夠立刻通過查詢回滾日志將之前未完成的事務(wù)進(jìn)行回滾,這也就需要回滾日志必須先于數(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 )保證的,在實(shí)現(xiàn)時也就是上面提到的兩種日志;欠著用于對事務(wù)的影響進(jìn)行撤銷,后者在錯誤處理時對已經(jīng)提交的事務(wù)進(jìn)行重做,它們能保證兩點(diǎn):

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

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

總結(jié) 

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

相關(guān)文章

  • Mysql數(shù)據(jù)庫的主從同步配置

    Mysql數(shù)據(jù)庫的主從同步配置

    這篇文章主要介紹了Mysql主從同步配置的相關(guān)資料,需要的朋友可以參考下文內(nèi)容
    2021-08-08
  • mysql5.5中文亂碼問題解決的有用方法

    mysql5.5中文亂碼問題解決的有用方法

    在使用MYSQL時遇到中文亂碼的問題,表現(xiàn)為插入數(shù)據(jù)后查詢時輸出為??(亂碼),下面這篇文章主要給大家介紹了關(guān)于mysql5.5中文亂碼問題解決的有用方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 淺談MYSQL主鍵約束和唯一約束的區(qū)別

    淺談MYSQL主鍵約束和唯一約束的區(qū)別

    本文主要介紹了MYSQL主鍵約束和唯一約束的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • mysql 判斷記錄是否存在方法比較

    mysql 判斷記錄是否存在方法比較

    把數(shù)據(jù)寫入到數(shù)據(jù)庫的時,常常會碰到先要檢測要插入的記錄是否存在,然后決定是否要寫入。
    2011-08-08
  • MySql使用mysqldump 導(dǎo)入與導(dǎo)出方法總結(jié)

    MySql使用mysqldump 導(dǎo)入與導(dǎo)出方法總結(jié)

    這篇文章主要介紹了MySql使用mysqldump 導(dǎo)入與導(dǎo)出方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • mysql不走索引的幾個問題小結(jié)

    mysql不走索引的幾個問題小結(jié)

    MySQL中不走索引的問題通常發(fā)生在查詢中使用了函數(shù),這會使索引失效,從而影響查詢性能,本文就介紹了mysql不走索引的幾個問題小結(jié),感興趣的可以了解一下
    2023-08-08
  • MySQL中的MVCC底層原理解讀

    MySQL中的MVCC底層原理解讀

    本文詳細(xì)介紹了MySQL中的多版本并發(fā)控制(MVCC)機(jī)制,包括版本鏈、ReadView以及在不同事務(wù)隔離級別下MVCC的工作原理,通過一個具體的示例演示了在可重復(fù)讀隔離級別下的MVCC執(zhí)行過程
    2025-02-02
  • MySQL命令行界面中出現(xiàn)字符錯誤提示的原因及解決方法

    MySQL命令行界面中出現(xiàn)字符錯誤提示的原因及解決方法

    這篇文章主要介紹了MySQL命令行界面中出現(xiàn)字符錯誤提示的原因及解決方法,同時文中還附帶了MySQL導(dǎo)入亂碼問題的解決辦法提示,需要的朋友可以參考下
    2016-03-03
  • MySQL多實(shí)例的配置應(yīng)用實(shí)例場景

    MySQL多實(shí)例的配置應(yīng)用實(shí)例場景

    在一臺服務(wù)器上,運(yùn)行多個數(shù)據(jù)庫服務(wù),這些服務(wù)進(jìn)程通過不同的socket監(jiān)聽不同的服務(wù)端口來提供各自的服務(wù),這篇文章主要介紹了MySQL多實(shí)例的配置場景分析,需要的朋友可以參考下
    2021-12-12
  • Mysql基礎(chǔ)學(xué)習(xí)之LAG與LEAD開窗函數(shù)

    Mysql基礎(chǔ)學(xué)習(xí)之LAG與LEAD開窗函數(shù)

    lead和lag是在SQL中用于創(chuàng)建窗口函數(shù)的兩個常用函數(shù),這篇文章主要給大家介紹了關(guān)于Mysql基礎(chǔ)學(xué)習(xí)之LAG與LEAD開窗函數(shù)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11

最新評論

高陵县| 建昌县| 普宁市| 德令哈市| 雷波县| 博客| 九龙城区| 黔西| 淮滨县| 杭锦后旗| 涪陵区| 永康市| 拜泉县| 博客| 思南县| 休宁县| 浦东新区| 项城市| 崇阳县| 阳新县| 永吉县| 个旧市| 广汉市| 崇左市| 通辽市| 大英县| 文水县| 西峡县| 延吉市| 秦安县| 黑水县| 修文县| 固阳县| 龙井市| 成都市| 荔浦县| 郯城县| 张家港市| 中卫市| 湖口县| 开远市|