Mysql事務的兩段式提交

binlogredo log區別

為了滿足Mysql的事物ACID特性,InnoDB引入了redo logundo log日志文件。為了滿足主從同步Mysql引入了binlog日志文件。redo logbinlog文件都保存的數據庫對數據庫的修改,但是binlogredo log本質上是不一樣的:

  • redo log是存儲引擎層產生,僅支持Innodb;binlog是mysql數據上層產生,支持所有存儲引擎。
  • redo log是記錄物理日志,記錄的是頁的物理修改;binlog記錄的是邏輯日志,記錄的是SQL語句。
  • redo log是在事務進過程中產生,日志內容并不是隨著事務提交順序寫入;binlog是在事務提交完成后釋放鎖之前進行一次性的寫入。
  • redo log主要所用是保證事務持久性;binlog主要用來所恢復和復制。

為什么需要二階段提交(2PC)

redo logbinlog數據不一致時就可能導致主從數據不一致,比如:

  • 只保存了redo log日志,當主節點宕機重啟后,主節點可以通過redo log日志恢復事物,保存數據最新,但是binlog丟失無法完成主從同步,這樣就導致從節點沒有最新數據。
  • 只保存了binlog,當主節點宕機重啟后,本機最新事物無法重新執行,數據丟失,但是從庫可能通過binlog已經收到了修改通知,從庫將會存在最新數據,而主庫沒有。

為了避免這種情況,MySQL 引入了兩階段提交的機制。

兩階段提交就是將一個事務分成兩個階段來提交:prepare 階段和 commit 階段。在 prepare 階段,事務會先寫 redo log 并將其標記為 prepare 狀態,然后寫 binlog;在 commit 階段,事務會將 redo log 標記為 commit 狀態,并將 binlog 落盤。這樣,無論數據庫在哪個時刻發生宕機,都可以根據 redo log 和 binlog 的狀態來判斷事務是否提交,并保證數據的一致性。

兩階段提交的流程

MySQL采用了如下的二階段提交流程:

  • 在準備階段,MySQL先將數據修改寫入redo log,并將其標記為prepare狀態,表示事務還未提交。然后將對應的SQL語句寫入bin log。
  • 在提交階段,MySQL將redo log標記為commit狀態,表示事務已經提交。然后根據sync_binlog參數的設置,決定是否將bin log刷入磁盤。

通過2PC機制,MySQL可以保證在任何時刻,redo log和bin log都是邏輯上一致的。如果MySQL發生崩潰,可以根據redo log恢復數據頁的狀態,也可以根據bin log恢復SQL語句的執行。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717898.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717898.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717898.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UE5中實現后處理深度描邊

后處理深度描邊可以通過取得邊緣深度變化大的區域進行描邊,一方面可以用來做角色的等距內描邊,避免了菲尼爾邊緣光不整齊的問題,另一方面可以結合場景掃描等特效使用,達到更豐富的效果: 后來解決了開啟TAA十字線和鋸齒…

XXL-Job的基本使用

一、市面上常見的任務調度產品 針對分布式任務調度的需求,市場上出現了很多的產品: 其中XXL-job 是我們經常使用的任務調度平臺,XXL這三個英文字母.是以作者名許雪里命名的。 可以前往 Gitee 地址進行下載使用 https://gitee.com/xuxueli0323/xxl-job.git二、XXL-J…

使用`paddle.nn.Layer`自定義網絡教程

文章目錄 使用paddle.nn.Layer自定義網絡教程1. 概念介紹2. 數據處理3. 搭建一個完整的深度學習網絡4. 使用paddle.nn.Layer構建深度學習網絡5. 利用paddle.nn.Layer進行子層的訪問6. 修改paddle.nn.Layer層的成員變量7. 存儲模型的參數8. 總結 使用paddle.nn.Layer自定義網絡教…

LockBit病毒入侵揭秘:如何防范與應對

在數字時代,隨著科技的飛速發展,網絡安全問題愈發凸顯。惡意軟件和勒索軟件等網絡威脅正不斷演變,其中一款備受關注的勒索軟件就是LockBit。本文將深入介紹LockBit的特征、攻擊手段、演進歷程以及對網絡安全的威脅。 01 主要特征 LockBit是…

算法知識(java)隨筆

1: 保留指定的小數為 printf("%.2f\n", ret) 和c語言類似 // 怎么保留小數 System.out.printf("%.2f\n", 1.0/3); 2: 在寫小數二分的時候 加入讓結果保留6位數 那么 while(r - l > 1e-8) 3: java Map里面之前寫的代碼: /*** 也就是 統計x在map里面的…

第二十一周周報

文獻閱讀:Recent Advances of Monocular 2D and 3D Human Pose Estimation: A Deep Learning Perspective 摘要:在本文中,作者提供了一個全面的 2d到3d視角來解決單目人體姿態估計的問題。首先,全面總結了人體的二維和三維表征。…

騰訊云Windows輕量應用服務器的默認密碼是什么,以及如何重置?

首先,騰訊云輕量應用服務器的默認用戶名是沒有設置密碼的,首次登錄時需要重置密碼。這意味著如果你的輕量應用服務器是騰訊云的,那么默認密碼是不存在的,需要通過重置密碼來獲得一個新的密碼。 關于如何重置密碼,有幾…

chatgpt新版本api的調用

chatgpt新版本api的調用 原始版本調用api方式:新版調用chatgpt-api的方式: 原始版本調用api方式: import openaiopenai.api_key "{上面復制的key}"completion openai.ChatCompletion.create(model"gpt-3.5-turbo",mes…

Spring El表達式官方文檔學習

文章目錄 推薦一、概述1、什么是SpEL2、SpEL能做什么 二、SpEL表達式使用1、文字表達式2、屬性, 數組, List, Map,和 索引(1)屬性操作(2)數組和List(3)Map 3、內嵌List4、內嵌Map5、構建數組6、調用類的方法…

Windows的Linux化持續推進中

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎?訂閱我們的簡報,深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同,從行業內部的深度分析和實用指南中受益。不要錯過這個機會,成為AI領…

Java基礎 - 6 - 面向對象(二)

Java基礎 - 6 - 面向對象(一)-CSDN博客 二. 面向對象高級 2.1 static static叫做靜態,可以修飾成員變量、成員方法 2.1.1 static修飾成員變量 成員變量按照有無static修飾,分為兩種:類變量、實例變量(對象…

JavaScript 語句語法的教程

JavaScript 是一種廣泛應用于網頁開發的腳本語言,熟練掌握 JavaScript 的語法是成為一名優秀的前端開發工程師的必備技能之一。本教程將詳細介紹 JavaScript 中的語句語法,幫助初學者快速入門并加深對 JavaScript 語法的理解。 一、注釋 在 JavaScript…

常見的爬蟲逆向面試題

文章轉載于:https://mp.weixin.qq.com/s/dXRo0D_Xx7E_h85XbnwPVQ 有興趣去源站瀏覽學習 主要自己看著方便些 1.HTTS三次握手 目前使用的 HTTP/HTTPS 協議是基于 TCP 協議之上的,因此也需要三次握手。在 TCP 三次握手建立鏈接之后,才會進行 …

故障診斷 | 一文解決,XGBoost極限梯度提升樹的故障診斷(Matlab)

效果一覽 文章概述 故障診斷 | 一文解決,XGBoost極限梯度提升樹的故障診斷(Matlab) 模型描述 XGBoost通過集成多個決策樹來建立一個強大的預測模型。它采用了一種特殊的梯度提升技術,稱為極限梯度提升(Extreme Gradient Boosting),以提高模型的性能和魯棒性。 極限梯度…

【大數據Hive】hive 多字段分隔符使用詳解

目錄 一、前言 二、hive默認分隔符規則以及限制 2.1 正常示例:單字節分隔符數據加載示例 2.2 特殊格式的文本數據,分隔符為特殊字符 2.2.1 文本數據的字段中包含了分隔符 三、突破默認限制規則約束 3.1 數據加載不匹配情況 1 3.2 數據加載不匹配…

python paramiko 網絡系統運維

概述 背景:網絡系統運維與建設:工作中發現客戶使用python腳本批量操作網絡設備導出多臺網絡設備的配置定期執行相關的巡檢工作 修改配置 # -*- coding:utf8 -*- """ # editor: hjjdreamer # create-time: 2024/3/3-23:31 # Python-Scri…

Java項目推薦|幾個B站上的從零搭建項目

分享幾個B站上搜集到的技術比較全,講解也詳細的Java后端開發項目 目錄 谷粒商城 2020-03-31 iHRM 人力資源管理系統 2021-04-16 瑞吉外賣 2022-04-12 學成在線 2023-01-13 尚上優選 2023-06-06 黑馬頭條 2023-06-13 蒼穹外賣 2023-07-05 谷粒商城 2020-03-3…

命名實體識別NER

一、什么是命名實體識別: 命名實體:通常我們將人名、地名、機構名等專有名詞統稱命名實體,如:周杰倫,黑山縣,孔子學院,24方鋼直機 顧名思議,命名實體識別(簡稱NER&#x…

【常用的 Git 命令及簡要示例說明】

常用的 Git 命令及簡要示例說明,以供參考: 初始化一個新的代碼倉庫: git init克隆一個遠程倉庫到本地: git clone https://github.com/user/repo.git添加當前所有變更到暫存區: git add .提交暫存區的變更到本地倉庫&a…

STM32FreeRTOS任務通知(STM32cube高效開發)

文章目錄 一、任務通知(一)任務通知概述1、任務通知可模擬隊列和信號量2、任務通知優勢和局限性 (二) 任務通知函數1、xTaskNotify()發送通知值不返回先前通知值的函數2、xTaskNotifyFromISR()發送通知函數ISR版本3、x…