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

MySQL崩溃恢复功臣—Redo Log

Redo log文件是InnoDB用于崩溃恢复(crash recovery)以及组提交(group commit)策略的重要文件,存在于磁盘上。...下面大致讲解下Redo log是怎么做到崩溃恢复以及组提交的。 崩溃恢复 崩溃恢复能力是指InnoDB可以保证数据库在异常崩溃重启后的状态和使用binlog文件恢复出来的数据库状态保持一致。...redo log是怎么的 先上一张图,是InnoDB更新数据时update语句的执行流程(摘自极客时间《MySQL实战45讲》,自己重新绘制),橙色的流程在InnoDB内部执行,蓝色的部分在MySQL...下面我们从上图4个可能发生异常关闭的时间点来分析InnoDB如何在MySQL启动时崩溃恢复。...组提交 上面关于崩溃恢复部分只是讲了写redo log和binlog的步骤,那么一定很疑惑数据是何时被写入到磁盘文件中的呢,这里就要说下InnoDB通过redo log实现的组提交的策略了。

11.3K101

MySQL 为什么需要 redo log?

我们知道,MySQL 架构整体上分为两层:Server 层和存储引擎层,如下图: 前面松哥文章+视频跟大家聊的 binlog,是 MySQL 自己提供的 binlog,而 redo log 则不是 MySQL...buffer pool 或者 change buffer,这样,即使系统突然崩了,将来也可以通过 redo log 恢复数据。...MySQL 关闭时,将 redo log buffer 写入磁盘成为 redo log file。 那如果 redo log buffer 中的数据还没有磁盘,MySQL 就挂了该怎么办?...挂了,将来 MySQL 重启恢复了,数据也是可以被恢复的。...具体的恢复逻辑,就涉及到两阶段提交了,这个松哥在后面的文章中再和大家详细介绍。 4.2 redo log 落盘 还有一个需要大家注意的问题就是 redo log 落盘,落盘的数据从哪里来?

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

    基于Redo Log和Undo Log的MySQL崩溃恢复流程

    MySQL 奔溃恢复 这个过程看似没啥问题,实则不讲武德。假设我们修改Buffer Pool中的数据成功,但是还没来得及将数据刷入磁盘MySQL就挂了怎么办?...那不完犊子吗,连数据持久化的保证、事务回滚都做不到还谈什么崩溃恢复Redo Log & Undo Log 而通过MySQL能够实现崩溃恢复的事实来看,MySQL必定实现了某些骚操作。...实现日志后的更新流程 有了Redo Log和Undo Log,我们再将上面的那张图给完善一下。 MySQL 崩溃恢复 首先,更新数据还是会判断数据是否存在于Buffer Pool中,不存在则加载。...redo-log-buffer 那为什么Undo Log不也搞一个Undo Log Buffer,也给Undo Log提提速,雨露均沾?...Redo Log恢复到Buffer Pool中的某行的A字段是3,但是任何监听其Binlog的数据库读取出来的数据确是2。

    1K10

    阿里为什么不用 ZK 服务发现?

    Why You Shouldn’t Use ZooKeeper for Service Discovery 那坚定的阐述一样,为什么你不应该用 ZooKeeper 服务发现! 吾道不孤矣。...的应用服务 svcB 是不可以新部署,重新启动,扩容或者缩容的,但是站在网络和服务调用的角度看,机房3的 svcA 虽然无法调用机房1和机房2的 svcB,但是与机房3的svcB之间的网络明明是 OK 的啊,为什么不让我调用本机房的服务...但是为什么又说需要呢,因为一个完整的生产可用的注册中心,除了服务的实时地址列表以及实时的健康状态之外,还会存储一些服务的元数据信息,例如服务的版本,分组,所在的数据中心,权重,鉴权策略信息,service...ConnectionLossException 事件 Disconnected 事件 简单来说,这是个可以在同一个 ZooKeeper Session 恢复的异常(Recoverable), 但是应用开发者需要负责将应用恢复到正确的状态...中恢复应用状态,必须要重新建立新Session,老Session关联的临时节点也可能已经失效,拥有的锁可能已经失效。

    87420

    mysql存储手机号为什么不用bigint?

    因此,为什么不使用bigint存储手机号呢? 手机号一般是要加索引的吧。。bigint你用了like索引就失效了 1.首先,手机号的本质是字符串而不是数字,只是恰巧长得像数字而已。...,依然不够,第二位从0到9分库分表,还剩下9位,这对于int来说,能够存储了; 我一直认为对于数字的处理,交给数字类型比较好,所有才会有这样的想法,int对比varchar总该有性能提升吧;当然这样,...那int实现的扩展性将是致命的; 分析下来,int或许有些许性能优势,但其带来的复杂度和扩展上的劣势让我根本都不必动手,就打消了念头了;唉,也许这就是为什么大多数公司选择varchar存储手机号的原因吧

    3.4K20

    MySQL为什么使用 timestamp 可以不用关心时区.

    之前一直有过疑惑为什么MySQL数据库存timestamp可以无视时区问题. 在业务中也是一直使用Laravel框架,内置的Migration也是使用的timestamp类型字段, 也没太关心....开始 查看当前数据库时区 mysql> show variables like "%time_zone%"; +------------------+--------+ | Variable_name...CST | | time_zone | +08:00 | +------------------+--------+ 2 rows in set (0.30 sec) 查看表结构 mysql...隐式的帮我们转换了, 让我们不用关心时区的问题 就是数据库实际上会保存 UTC 时间戳,写入的时候先按 Session 时区转成 UTC 时间,读出的时候再按 Session 时区转成当前时区的时间,...,并且把当前连接的时区设置为+00:00,再去查数据库这条记录,查到的数据是:2020-12-09 00:00:00, 正好对应零时区的时间,这样子我们就不用考虑时区的问题

    20910

    MySQL日志15连问

    发生数据库服务器宕机、或者脏页未写入磁盘,可以通过redo log恢复。 它是Innodb存储引擎独有的 为什么需要 redo log?...redo log主要用于MySQL异常重启后的一种数据恢复手段,确保了数据的一致性。 其实是为了配合MySQL的WAL机制。...MySQL执行更新操作后,在真正把数据写入到磁盘前,先记录日志。 好处是不用每一次操作都实时把数据写盘,就算crash后也可以通过redo log恢复,所以能够实现快速响应SQL语句。...但是bin log不可以crash safe,因为crash之前,bin log可能没有写入完全MySQL就挂了。所以需要配合redo log才可以进行crash safe。...什么是MySQL两阶段提交, 为什么需要两阶段提交? 其实所谓的两阶段就是把一个事务分成两个阶段来提交。

    89031

    ElasticSearch(7.2.2)-为什么不⽤mysql全⽂搜索

    本文链接:https://blog.csdn.net/weixin_42528266/article/details/102785018 简介:为什么要⽤全⽂搜索引擎,⽽不⽤mysql全⽂搜索呢...前⾔ 有⼈可能会问,为什么⼀定要⽤搜索引擎呢?...⽽且 Mysql,Oracle,SQL Server 等数据库⾥不是也能提供查询搜索功能,直接通过数据库查询不就可以了吗?...那为什么还要全⽂搜索引擎呢?我们从⼏个⻆度来说 数据类型 全⽂索引搜索很好的⽀持⾮结构化数据的搜索,可以更好地快速搜索⼤量存在的任何单词⾮结构化⽂本。...搜索性能 如果使⽤mysql搜索,⽐如有个player表,这个表有user_name这个字段,我们要查找出user_name以james开头的球员,和含有James的球员。我们⼀般怎么

    65720

    腾讯二面:MySQL 三大日志,介绍一下?

    最近行情越来越卷了,给大家整理了互联网大厂15道经典MySQL日志面试题,希望大家都能找到理想的offer redo log是什么? 为什么需要redo log?....如果数据库误操作, 如何执行数据恢复? 说说binlog日志三种格式 什么是MySQL两阶段提交, 为什么需要两阶段提交?...发生数据库服务器宕机、或者脏页未写入磁盘,可以通过redo log恢复。 它是Innodb存储引擎独有的 为什么需要 redo log?...MySQL执行更新操作后,在真正把数据写入到磁盘前,先记录日志。 好处是不用每一次操作都实时把数据写盘,就算crash后也可以通过redo log恢复,所以能够实现快速响应SQL语句。...但是binlog不可以crash safe,因为crash之前,bin log可能没有写入完全MySQL就挂了。所以需要配合redo log才可以进行crash safe。

    25711

    MySQL日志15连问

    金九银十已经来了,整理了15道经典MySQL日志面试题,希望对大家有帮助。 1. redo log是什么? 为什么需要redo log? redo log 是什么呢?...它是Innodb存储引擎独有的 为什么需要 redo log? redo log主要用于MySQL异常重启后的一种数据恢复手段,确保了数据的一致性。 其实是为了配合MySQL的WAL机制。...MySQL执行更新操作后,在真正把数据写入到磁盘前,先记录日志。 好处是不用每一次操作都实时把数据写盘,就算crash后也可以通过redo log恢复,所以能够实现快速响应SQL语句。...但是bin log不可以crash safe,因为crash之前,bin log可能没有写入完全MySQL就挂了。所以需要配合redo log才可以进行crash safe。...什么是MySQL两阶段提交, 为什么需要两阶段提交? 其实所谓的两阶段就是把一个事务分成两个阶段来提交。

    1.5K40

    一文看懂MySQL执行update更新语句的流程

    (粉板)里面,并更新内存,更新就算完成了 InnoDB在适当时,将操作记录更新到磁盘,而这个更新往往是在系统比较空闲的时候,这就像打烊以后掌柜的事。...为什么需要两份日志? 最开始MySQL并无InnoDB,自带的是MyISAM,没有crash-safe的能力,binlog只能用于归档。...两阶段提交 为什么必须有“两阶段提交”? 为了让两份日志之间的逻辑一致。 思考怎样让数据库恢复到半个月内任意一秒的状态? binlog会记录所有的逻辑操作,并且采用“追加写”。...如果DBA承诺说半个月内可以恢复,那么备份系统中一定会保存最近半个月的所有binlog,同时系统会定期整库备份。 “定期”取决于系统的重要性,可以是一天一备,也可以是一周一备。...为什么需要“两阶段提交” 由于redo log和binlog是两个独立的逻辑,如果不用两阶段提交,要么就是先写完redo log再写binlog,或者反序。

    3.5K10

    MySQL为什么用B+树,而不用B树?

    面试题1: MySQL为什么用B+树,而不用B树?...本地分析一般是在宿主机上安装代理,执行分析命令,上报到服务器 面试题3:Mysql主从的延迟怎么解决呢,有什么好的思路吗?...3.服务的基础架构在业务和mysql之间加入memcache或者redis的cache层。降低mysql的读压力。 4.不同业务的mysql物理上放在不同机器,分散压力。...然后我们再降低主库的压力,比如读写分离 面试题4:mysql隐式转换不走索引怎么办? 当操作符左右两边的数据类型不一致时,会发生隐式转换。...面试题6:我们也在用RocketMQ,之前的架构比较简单,公司准备微服务化,现在让我负责这一块,感觉微服务就是拆分,想象不出有啥问题,心理有些没底,想问下都需要注意哪些点?

    1K20

    MySQL面试常问:一条语句提交后,数据库都做了什么?

    执行器 MySQL 通过分析器知道了你要做什么,通过优化器知道了该怎么,于是就进入了执行器阶段,开始执行语句。...redo log 用于回滚,binlog 用于恢复。 如果将 MySQL 恢复到某一天的某一秒 要做到这一点有个前提,就是要对 MySQL 数据库定期整库备份。...当需要恢复到指定的某一秒时,比如某天下午两点发现中午十二点有一次误删表,需要找回数据,那你可以这么: 首先,找到最近的一次全量备份,如果你运气好,可能就是昨天晚上的一个备份,从这个备份恢复到临时库;...你可能会问,处于 prepare 阶段的 redo log 加上完整 binlog,重启就能恢复MySQL 为什么要这么设计?...还有一个问题,就是为什么不让 redo log 也承担 binlog 的功能?

    91620

    MySQL基础篇2 mysql的日志系统

    mysql如何做到恢复半月内任意一秒的数据呢?...为什么会有两份日志呢?...如果你的 DBA 承诺说半个月内可以恢复,那么备份系统中一定会保存最近半个月的所有 binlog,同时系统会定期整库备份。...这里的“定期”取决于系统的重要性,可以是一天一备,也可以是一周一备 当需要恢复到指定的某一秒时,比如某天下午两点发现中午十二点有一次误删表,需要找回数据,那你可以这么: 首先,找到最近的一次全量备份...用反证法证明为什么需要两阶段提交 由于 redo log 和 binlog 是两个独立的逻辑,如果不用两阶段提交,要么就是先写完 redo log 再写 binlog,或者采用反过来的顺序。

    44440

    数据日志系统解决了好多大问题!

    (注:如果不这么,假如一个日志提交成功的时候,另一个日志提交之前发生了数据库发生了崩溃,但是crash-safe恢复或者误删库恢复的时候可能造成二者数据不统一出现问题。)...这个参数我也建议你设置成 1,这样可以保证 MySQL 误删除操作(删除表数据,删除库数据) 通过binlog 仍可恢复。...如何查看这两种日志 关于日志系统的一些误区和疑问 大家会不会想有了redo日志就可以了,为什么还要出现binlog日志呢? 解答: redo日志是只要InnoDB引擎才提供的一个内容。...写入redo日志也是io操作,数据更新直接写入磁盘也是io操作,为什么说写入redo日志效率高节省io成本呢?...解答:redo日志的写入是顺序写入的,不用去“找位置”,而直接更新数据到磁盘的话,需要到磁盘中找到位置再写入,肯定前者的效率高。

    97210
    领券