首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL--事务机制原理

事务机制 其实,讨论MySQL的事务机制,也就是在说MySQL的事务原子性是如何实现的(关于事务之前文章中有过简单介绍)。...实现原理 在说明原理之前,需要首先介绍一下MySQL的事务日志。...MySQL的日志有很多种,如二进制日志、错误日志、查询日志、慢查询日志等,此外InnDB引擎还提供了两种事务日志:redo log(重做日志)和undo log(日志)。...当发生时,InnoDB会根据undo log的内容做之前相反的工作:对于每个insert,时会执行delete;对于每个delete,时会执行insert;对于每个update,时会执行一个相反的...所以说我们可以得出以下结论: 每条数据变更操作都伴随着一条undo log的生成,并且日志必须先于数据持久化到磁盘上。 所谓也就是根据日志做逆向操作。

2.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

MySQL】MyFlash mysql binlog

简介: 数据库运行过程中难免会发生误操作,特别是在测试环境 开发人员或测试人员有时会误删或者更新错误某些数据。这时可以用binlog闪DML操作。...本篇文章主要介绍通过MyFlash工具来回binlog。 MyFlash是由美团点评公司技术工程部开发维护的一个DML操作的工具。该工具通过解析v4版本的binlog,完成操作。...相对已有的工具,其增加了更多的过滤选项,让更加容易。...3.start-position 指定滚开始的位置。如不指定,从文件的开始处。请指定正确的有效的位置,否则无法 4.stop-position 指定结束的位置。如不指定,滚到文件结尾。...请指定正确的有效的位置,否则无法 5.start-datetime 指定的开始时间。注意格式必须是 %Y-%m-%d %H:%M:%S。

3.9K10

MyFlash mysql binlog

简介:MyFlash是由美团点评公司技术工程部开发维护的一个DML操作的工具。该工具通过解析v4版本的binlog,完成操作。相对已有的工具,其增加了更多的过滤选项,让更加容易。...3.start-position 指定滚开始的位置。如不指定,从文件的开始处。请指定正确的有效的位置,否则无法 4.stop-position 指定结束的位置。如不指定,滚到文件结尾。...请指定正确的有效的位置,否则无法 5.start-datetime 指定的开始时间。注意格式必须是 %Y-%m-%d %H:%M:%S。...如不指定,则不限定时间 6.stop-datetime 指定的结束时间。注意格式必须是 %Y-%m-%d %H:%M:%S。...8.maxSplitSize 一旦指定该参数,对文件进行固定尺寸的分割(单位为M),过滤条件有效,但不进行操作。

1.5K20

MySQL 日志 undo log

事务日志分为undo log(日志) 和 redo log(重做日志) 二、undo log 1. undo log的概念 undo log和redo log统称事务日志,不同于binlog是MySQL...出现异常时(如数据持久化过程断电),重启后InnoDB会使用redo log恢复到断电前的状态,保证数据的完整性 undo log:日志,保存了事务发生之前的数据的一个版本,用于事务的操作,同时也是实现多版本并发控制...(MVCC)下读操作(快照读)的关键技术 2. undo log的作用 undo log日志的主要作用: 事务发生错误rollback,数据更新之前,会把原始数据保存在日志中,保证事务出错或者我们手动的时候...事务开启请求发到MySQL server上,MySQL server为每个事务都会分配一个全局的,不冲突的事务ID(InnoDB存储引擎分配的,因为它才支持事务)。...防止事务恢复修改前的状态,需要将最初的数据存放在undo log中!

21930

mysql事务机制概述

对于上面的取钱这个事情,如果有一步出现错误的话,那么就会取消整个取钱的动作,但是如果在第5步,系统后台已经把钱减了,但是ATM机没有取出来,那么就应用到mysql中的事务。...事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务是指将该事务已经完成的对数据库的更新操作撤销,在事务中,每个正确的原子 操作都会被顺序执行,直到遇到错误的原子操作...事务T2读取到了T1更新后的行,然后T1执行操作,取消了刚才所做的修改。...然后T1又再次读取这行记录,发现刚才读取的结果不同。...mysql事务怎样实现的代码可以参考此bolg:http://bbs.csdn.net/topics/390876901 要同时修改数据库中两个不同表时,如果它们不是一个事务的话,当第一个表修改完

2.6K20

mysql事务机制概述「建议收藏」

对于上面的取钱这个事情,如果有一步出现错误的话,那么就会取消整个取钱的动作,但是如果在第5步,系统后台已经把钱减了,但是ATM机没有取出来,那么就应用到mysql中的事务。...事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务是指将该事务已经完成的对数据库的更新操作撤销,在事务中,每个正确的原子 操作都会被顺序执行,直到遇到错误的原子操作...事务T2读取到了T1更新后的行,然后T1执行操作,取消了刚才所做的修改。...然后T1又再次读取这行记录,发现刚才读取的结果不同。...mysql事务怎样实现的代码可以参考此bolg:http://bbs.csdn.net/topics/390876901 要同时修改数据库中两个不同表时,如果它们不是一个事务的话,当第一个表修改完

2.6K10

Git 代码找回的艺术

本文作者: marklai(赖泽浩)- 高级软件工程师,十年软件配置管理经验,现服务于 CSIG 云智慧产业事业群质量部 导语 Git 是一个灵活和强大的版本管理工具,正确使用能够有效促进团队协作...不恰当的代码操作是其中的主要问题之一。 本文主要分享针对不同场景的代码操作,以及如何抢救误删的内容。...更甚者,push -f提示目标是保护分支(例如master)而无法推送成功,于是小红取消了分支保护,从而使得push -f成功。...通过git status可以看到相关提示: [change-in-staging.png] 执行以下命令暂存区的修改: git reset HEAD build.sh 后工作区会保留该文件的改动...合并 commit 是一个较为复杂的话题,作为一般性建议,应避免合并 commit。

1.5K20

MySQL事务部分-滚到指定保存点「建议收藏」

我们可以在mysql事务处理过程中定义保存点(SAVEPOINT),然后滚到指定的保存点前的状态。 定义保存点,以及滚到指定保存点前状态的语法如下。...定义保存点—SAVEPOINT 保存点名; 滚到指定保存点—ROLLBACK TO SAVEPOINT 保存点名: 下面演示将向表user中连续插入3条数据,在插入第2条数据的后面定义一个保存点,最后看看能否滚到此保存点...事务开始 mysql> BEGIN; Query OK, 0 rows affected (0.00 sec) 3、向表user中插入2条数据 mysql> INSERT INTO user VALUES...| 3 | one | 0 | | | 4 | two | 0 | | | 5 | three | 0 | | +—–+———-+—–+——+ 5 rows in set (0.02 sec) 6、滚到保存点...test mysql> ROLLBACK TO SAVEPOINT test; Query OK, 0 rows affected (0.31 sec) mysql> select * from user

1.9K30

MySQL】通过Binary Log简单实现数据(一)

前段时间,工作项目上出于对excel等批量操作可能出现误操作的问题,要求提供一个能够根据操作批次进行数据的能力。在开发的过程中接触到了MySQL的Binary Log,感觉有些收获,记录一下。...MySQL的时候默认只给了mysql用户,所以要加-u切换成mysql。...可变大小:用bit来表示是否每列被使用,一个bit一列,如果N个列,要用INT((N+7)/8)字节 可变大小(针对UPDATE_ROWS_LOG_EVENT),上面相同,表示的是更新后每列是否被使用...根据不同选项,你可以得到原始SQL、SQL、去除主键的INSERT SQL等。...谢谢各位园友观看,如果有描述不对的地方欢迎指正,大家共同进步!

1.4K110

MySQL 死锁后事务无法是真的吗?

MySQL 作为目前互联网企业使用最多的,或者说在基于成本下,最流行的数据库之一,MySQL 在国内使用者众多,那么在MySQL偶然安装后,在使用中出现死锁后,死锁中的事务到底能不能 ?...-+------+ | 2 | e | | 3 | c | +----+------+ 2 rows in set (0.00 sec) 从上的结果看,实际上在事务出现操作错误后,按照数据库原理是应该全部的...当然事务不完全对于使用者本身是不是一个问题,具体我们需要看业务的设定是不是允许或接受,如同MySQL 本身也在表设计时也不希望遵循 三范式一样。MySQL 是一个反传统的数据库产品。...经过我们的调整MySQL的参数后,MySQL 满足了我们传统的数据库对于事务中的要求,要么全,要么全不回。...A 和 B 事务代码,事务A 中的插入是没有生效的,从而证明MySQL 完全可以实现在死锁后死锁事务的全部

33141

基于 Kubernetes 进行 Nginx 的升级

Hello folks,今天我们介绍一下如何在 Kubernetes 集群环境中进行服务组件的升级,此处,我们以 Nginx 组件为例,基于 K3d 所搭建的环境进行。...在本文中,我们将首先部署版本 Nginx v1.20.2,然后滚动更新至 v1.21.6,最后再回至 v1.21.4。...其实,从本质上来讲,当我们对应用程序进行 kubectl apply 命令操作时,Kubernetes 会记录当前配置并将其保存为修订版,以便可以滚到特定修订版。...接下来,我们基于当前的 Nginx v1.21.6 进行操作,将其回退至 Nginx v1.21.4,具体如下: [leonli@192 update ] % vi nginx-roll-update.yml...基于上述结果,我们可以看到,此时 Nginx 已至 v1.21.4,一个简单的容器升级部署操作到此结束。

78160

MySQL 核心模块揭秘 | 14 期 | 整个事务

本文基于 MySQL 8.0.32 源码,存储引擎为 InnoDB。 正文 1....整个事务时,事务执行过程中改变(插入、更新、删除)的数据都不要了,产生的 binlog 日志也就没有用了。 整个事务,首先要进行的步骤就是 binlog 。...InnoDB binlog 操作结束之后,接下来就是 InnoDB 滚了。...读取上一条 undo 日志,没有了,InnoDB 操作结束。 4. 提交事务 InnoDB 操作完成之后,接下来要怎么办? 这其实取决于操作是怎么进行的。...InnoDB 步骤中提交事务的容错性更好,失败之后就不清除 binlog 日志了,也不损失什么。 6. 总结 整个事务,主要分为三大步骤。

10410
领券