redolog与binlog为什么需要两阶段提交?

news2025/1/10 20:49:14

MySQL事务提交的时候,需要同时完成redo
log和binlog的提交,为了保证两个日志的一致性,需要用到两阶段提交(与分布式的两阶段提交不同,这里的两阶段提交是发生在数据库内部)

数据库两阶段提交的流程
假设执行一条SQL语句:

update T set c=c+1 where ID=2;

在这里插入图片描述
两阶段流程
从图中可以看出,在最后提交事务的时候,需要有3个步骤:

  • 写入redo log,处于prepare状态
  • 写binlog
  • 修改redo log状态为commit

ps: redo log的提交分为prepare和commit两个阶段,所以称之为两阶段提交

为什么需要两阶段提交?
假设当前 ID=2 的行,字段 c 的值是 0,再假设执行 update 语句过程中在写完第一个日志后,第二个日志还没有写完期间发生了 crash,会出现什么情况呢?

先写 redo log 后写 binlog。假设在 redo log 写完,binlog 还没有写完的时候,MySQL 进程异常重启。由于我们前面说过的,redo log 写完之后,系统即使崩溃,仍然能够把数据恢复回来,所以恢复后这一行 c 的值是 1。但是由于 binlog 没写完就 crash 了,这时候 binlog 里面就没有记录这个语句。因此,之后备份日志的时候,存起来的 binlog 里面就没有这条语句。然后你会发现,如果需要用这个 binlog 来恢复临时库的话,由于这个语句的 binlog 丢失,这个临时库就会少了这一次更新,恢复出来的这一行 c 的值就是 0,与原库的值不同。
先写 binlog 后写 redo log。如果在 binlog 写完之后 crash,由于 redo log 还没写,崩溃恢复以后这个事务无效,所以这一行 c 的值是 0。但是 binlog 里面已经记录了“把 c 从 0 改成 1”这个日志。所以,在之后用 binlog 来恢复的时候就多了一个事务出来,恢复出来的这一行 c 的值就是 1,与原库的值不同。
可以看到,如果不使用“两阶段提交”,那么数据库的状态就有可能和用它的日志恢复出来的库的状态不一致。

如何完成崩溃恢复
流程中崩溃可能导致问题如下图:
在这里插入图片描述
崩溃恢复
如果在图中时刻 A 的地方,也就是写入 redo log 处于 prepare 阶段之后、写 binlog 之前,发生了崩溃(crash),由于此时 binlog 还没写,redo log 也还没提交,所以崩溃恢复的时候,这个事务会回滚。这时候,binlog 还没写,所以也不会传到备库。

如果 redo log 里面的事务是完整的,也就是已经有了 commit 标识,则直接提交;如果 redo log 里面的事务只有完整的 prepare,则判断对应的事务 binlog 是否存在并完整:

a. 如果是,则提交事务;
b. 否则,回滚事务。

ps: 两阶段提交的最后一个阶段的操作本身是不会失败的,除非是系统或硬件错误,所以也就不再需要回滚(不然就可以无限循环下去了)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/630099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【P59】JMeter 用表格查看结果(View Results in Table)

文章目录 一、用表格查看结果(View Results in Table)参数说明二、准备工作三、测试计划设计 一、用表格查看结果(View Results in Table)参数说明 可以将取样器请求以表格的方式分析展示 使用场景:一般在调试测试计…

深入理解相机服务层 CameraService

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、简介二、Camera AIDL 接口三、Camera Service 主程序 一、简介 Camera Service被设计成一个独立进程,作为一个服务端,处理来…

LIMS实验室信息管理系统源码 lims系统源码

一、LIMS概况 LIMS实验室管理系统是为实验、检测等业务板块提供流程化、模块化、标准化操作管理系统,打造基于行业法规的实验室全流程质量控制管理系统,实现实验室“人、机、料、法、环”关键环节管理。 二、技术框架说明 开发语言:C# 开…

是否需要更换CRM系统如何评估?如何确保更换成功?

很多企业在使用CRM客户管理系统的过程中,并没有达到预期的效果,甚至出现了实施失败的情况。部分企业可能会考虑更换CRM系统,以期获得更好的结果。但是,更换CRM系统是否值得呢?下面我们就来说说。 一、是否该更换CRM …

电容笔和触控笔两者的区别是什么?好用苹果电容笔推荐

如今,随着无纸化教育的兴起,电容笔也成为了人们关注的焦点。很多人对于电容笔和触控笔的区别很疑惑,其实,这两者是很好区分的,电容笔只能应用在我们最常用的电容屏上,例如我们的平板、手机屏幕等都是电容屏…

Redis 消息队列 Stream

tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 💕💕 推荐:体系化学习Java(Java面试专题&#…

电脑技巧:Windows微信3.9.5更新一览

目录 01、新增锁定功能 02、可直接撤回正在发送的消息 03、翻译多个网页 04、搜一搜新增历史记录 05、视频号页面再次优化 近期,Windows微信又更新至3.9.5版本,新增了许多实用的功能,以下将对这些新功能进行介绍。 官方更新内容&#x…

mybatis-plus用法(一)

MyBatis-plus 是一款 Mybatis 增强工具,用于简化开发,提高效率。下文使用缩写 mp来简化表示 MyBatis-plus,本文主要介绍 mp 整合 Spring Boot 的使用。 (5条消息) mybatis-plus用法(二)_渣娃工程师的博客-CSDN博客 1…

【K哥爬虫普法】一个人、一年半、挣了2000万!

我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了“K哥爬虫普法”专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识,知晓如何合法合规利用…

2023免费版电脑视频剪辑软件会声会影

提到视频剪辑软件,浮现在我们脑海的可能就是满屏的功能键和眼花缭乱的操作界面。类似pr、AE之类的视频软件,操作界面看起来十分复杂,很多用户上手困难。而会声会影界面简单,功能齐全,也能完成专业级的视频制作。操作简…

基于SSM+JSP的疫情居家办公OA系统设计与实现

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

springboot+vue.js大学生竞赛报名作品评分管理系统

本文介绍了大学生竞赛管理系统的开发全过程。通过分析大学生竞赛管理系统管理的不足,创建了一个计算机管理大学生竞赛管理系统的方案。文章介绍了大学生竞赛管理系统的系统分析部分,包括可行性分析等,系统设计部分主要介绍了系统功能设计和数…

Get请求如何传递数组、对象

文章目录 Get请求如何传递数组1、将数组参数传递多次2、直接将数组指用逗号分隔 Get请求如何传递对象 Get请求如何传递数组 1、将数组参数传递多次 可以将数组参数传递多次,springmvc会将多个同名参数自动封装成数组或者集合对象,示例如下:…

JavaScript库:jQuery,简化编程

1. jQuery介绍 官方网站 : https://jquery.com jQuery 是一个 JavaScript 库 。极大地简化了 JavaScript 编程,例如 JS 原生代码几十行 实现的功 能, jQuery 可能一两行就可以实现,因此得到前端程序猿广泛应用。 发展至今&#xff0…

chatgpt赋能python:Python如何保存数据到CSV文件中

Python如何保存数据到CSV文件中 作为一门广泛应用于数据分析和机器学习的编程语言,Python提供了许多方法来处理和保存数据。其中之一是将数据保存到CSV文件中。本篇文章将介绍如何使用Python保存数据到CSV文件,在此过程中,我们会提到一些有用…

【保姆级】如何创建一个Vue工程

如何创建一个Vue工程 文章目录 如何创建一个Vue工程1、下载安装Node.js2、配置环境变量3、npm 安装淘宝镜像4、安装Vue CliVue 安装失败原因 5、在线创建工程创建工程启动服务启动报错停止服务重启服务 1、下载安装Node.js Node.js是一个js运行环境,Vue工程需要建立…

端午节特别活动 | 在 Python 中制作端午节游戏

端午节将至,为了丰富人们的节日生活,CSDN为大家带来了特别的端午礼包。作为一名程序员,我们又该如何在节日中发挥自己的特长呢?在本篇文章中,我们将使用 Python 制作一个端午节相关的小游戏,让大家在游戏中…

mac m1/m2 芯片安装 ps 2023 插件无法显示扩展界面

碎碎念:一直在踩坑的路上,甚至想休息时间玩一会儿 ps 都能踩坑 问题描述 新的 m2 芯片 mac 安装了色环插件后,在窗口界面中没有找到扩展,且在首选项->增效工具的旧版扩展也是灰色的 题外话:记录一下 mac 的 photo…

字节跳动大数据容器化构建与落地实践

动手点关注 干货不迷路 随着字节跳动旗下业务的快速发展,数据急剧膨胀,原有的大数据架构在面临日趋复杂的业务需求时逐渐显现疲态。而伴随着大数据架构向云原生演进的行业趋势,字节跳动也对大数据体系进行了云原生改造。本文将详细介绍字节跳…

指令模板:技术文档设计与结构化内容架构 | AIGC实践

【题外话】 在上一篇文章中,有朋友反馈说,【见睿思齐】的字号设置得太小了,读起来有点儿费劲。 首先,特别感谢这位热心读者,开诚布公地与我分享感受,提出宝贵意见,帮助我做得更好。 因此在这篇文…