首页
学习
活动
专区
圈层
工具
发布

MySQL 回滚日志 undo log

同一份数据会有多个版本 InnoDB提供了2种读取操作:锁定读和非锁定读 锁定读就是读取的时候加锁(S或X) 非锁定读就是读取的时候没有加锁,指的就是MVCC提供的快照读—>快照读依赖的是底层的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,数据更新之前,会把原始数据保存在回滚日志中,保证事务出错回滚或者我们手动回滚的时候...,能够在回滚日志中找到最初的数据 提供了MVCC的非锁定读(快照读),依赖undo log实现 3. undo log的数据结构 在MVCC下,针对表的所有记录,除了我们自行设定的字段book_id、book_name

1.7K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PostgreSQL的clog—从事务回滚速度谈起

    如果是之前学习别的数据库的人,看PostgreSQL会感觉到有句话非常奇怪:“PostgreSQL的回滚是立即完成的,不会受到事务大小本身的影响”。 奇怪在哪里呢?...一个kill命令过去之后,我们当时俩DBA开始慢慢数—小蚂蚁慢慢爬——碰到—颗大豆芽——碰到两颗大豆芽—— 最终在将近三个小时的rollback之后,这个事务完成回滚,业务系统恢复。...看到这里,就可以明白,只要事务提交的时候,设置状态为已提交,而事务回滚的时候,设置状态为已中断,就可以达到目的,的确避免了操作数百万行的事务突然要回滚时候的巨大代价。...当这个事务最终提交或者回滚的时候,其最终状态就会被记录入clog。 事务提交与回滚时候的clog操作 ---- 首先来说提交。...当事务之后提交,或者回滚的时候,pg是必然不会回头改这个标记的,否则无论提交还是回滚,都是一个代价巨大的事情。

    2.1K20

    PostgreSQL的clog—从事务回滚速度谈起

    :“PostgreSQL的回滚是立即完成的,不会受到事务大小本身的影响”。...一个kill命令过去之后,我们当时俩DBA开始慢慢数—小蚂蚁慢慢爬——碰到—颗大豆芽——碰到两颗大豆芽—— 最终在将近三个小时的rollback之后,这个事务完成回滚,业务系统恢复。...看到这里,就可以明白,只要事务提交的时候,设置状态为已提交,而事务回滚的时候,设置状态为已中断,就可以达到目的,的确避免了操作数百万行的事务突然要回滚时候的巨大代价。...当这个事务最终提交或者回滚的时候,其最终状态就会被记录入clog。 事务提交与回滚时候的clog操作 ---- 首先来说提交。...当事务之后提交,或者回滚的时候,pg是必然不会回头改这个标记的,否则无论提交还是回滚,都是一个代价巨大的事情。

    3.1K20

    图文结合带你搞定MySQL日志之Undo log(回滚日志)

    Undo Log:数据库事务开始之前,会将要修改的记录放到Undo日志里,当事务回滚时或者数据库崩溃时,可以利用UndoLog撤销未提交事务对数据库产生的影响。 Undo Log是事务原子性的保证。...(对于每个UPDATE,InnoDB存储引擎会执行一个相反的UPDATE,将修改前的行放回去) MySQL把这些为了回滚而记录的这些内容称之为撤销日志或者回滚日志(即Undo Log)。...Undo Log日志的存储机制 如上图,可以看到,Undo Log日志里面不仅存放着数据更新前的记录,还记录着RowID、事务ID、回滚指针。...其中事务ID每次递增,回滚指针第一次如果是INSERT语句的话,回滚指针为NULL,第二次UPDATE之后的Undo Log的回滚指针就会指向刚刚那一条Undo Log日志,以此类推,就会形成一条Undo...Undo Log的工作原理 在更新数据之前,MySQL会提前生成Undo Log日志,当事务提交的时候,并不会立即删除Undo Log,因为后面可能需要进行回滚操作,要执行回滚(ROLLBACK)操作时

    6.8K31

    OracleMysql迁移到Postgresql事务回滚行为差异及改造方法

    Mysql或Oracle迁移到Postgresql系产品后,经常会发生事务回滚导致的问题,具体问题一般都是类似于: 为什么我没rollback,我的事务就自己回滚了?...下面我举一个简单的例子,说明下PG和其他两款DB在事务回滚行为上的差异 汇总 Oracle事务内报错后的行为 Class.forName("oracle.jdbc.driver.OracleDriver...Postgresql事务内报错后的行为 public class TestPgsql { private static final String URL = "jdbc:postgresql:...ERROR: current transaction is aborted, commands ignored until end of transaction block 第二个差异点:报错后,事务自动回滚...不可以,在报错时事务已经回滚,虽然提交没有报错,但是写入的数据不会生效 commit后 数据没有写入: 迁移到Postgresql后如何改造?

    1.8K30

    git commit回滚

    2.1 git reset --hard 丢弃最新的提交 代码提交后,需求发生变化导致之前提交的已经不合适,或者 代码提交后发现有严重bug,需要回滚可是使用这个命令: git reset --hard...tips: 1,HEAD^ 表示 最新提交HEAD位置往回数一个提交, 几个 ^ 就往回数几个提交; 2,HEAD~n 表示 新提交HEAD位置往回数n个提交 可以发现,reset 命令只能回滚最新的提交...如果最后一次commit需要保留,而只想回滚之前的某次commit,reset命令可能就无法满足了。...总结: 回滚最新的提交 :git reset 和 git rebase 命令都可以 回滚中间某次提交: git rebase 可以, git reset 不可以 如果提交已经同步到远程仓库,需要使用git...push origin -f branch(分支名) 来将回滚也同步到远程仓库(master 分支谨慎使用 -f)

    10K30

    MySQL 中的重做日志,回滚日志以及二进制日志的简单总结

    来源:MSSQL123 , www.cnblogs.com/wy123/p/8365234.html 转自:ImportNew MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志...其中重做日志和回滚日志与事务操作息息相关,二进制日志也与事务操作有一定的关系,这三种日志,对理解MySQL中的事务操作有着重要的意义。 这里简单总结一下这三者具有一定相关性的日志。...回滚日志(undo log) 作用: 保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读 内容: 逻辑格式的日志,在执行undo的时候,仅仅是将数据从逻辑上恢复至事务之前的状态...对应的物理文件: MySQL5.6之前,undo表空间位于共享表空间的回滚段中,共享表空间的默认的名称是ibdata,位于数据文件目录中。...之后的独立undo 表空间配置参数如下 innodb_undo_directory = /data/undospace/ –undo独立表空间的存放目录 innodb_undo_logs = 128 –回滚段为

    4.1K70
    领券