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实现的组提交的策略了。
我们知道,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 落盘,落盘的数据从哪里来?
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。
一个经典的MySQL索引问题 今天分享一个线上的经典MySQL索引问题。 01背景介绍 今天在线上运维过程中,遇到了一个MySQL的经典索引问题。...那么对于这两个SQL,MySQL会采用何种执行计划呢?...02执行计划分析 执行计划分析如下: MySQL >explain select * from test_index where age>0 and age<20000 order by age...为什么第2个SQL的限制条件更多,但是却能用到索引,第一个SQL的限制条件更少,却用不到索引? 真实情况是什么样子的?...03 为什么会有这种差异呢? MySQL优化器的逻辑是关键。 在MySQL存储引擎中,磁盘和内存通过数据页来交互, MySQL中,采用的是基于成本的优化。
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关联的临时节点也可能已经失效,拥有的锁可能已经失效。
为什么MySQL InnoDB 存储引擎 要用B+树做索引,而不用B树?...为什么是B+树而不是B树呢,因为它内节点不存储data,这样一个节点就可以存储更多的key。...MyISAM和InnoDB存储引擎 在MySQL中,最常用的两个存储引擎是MyISAM和InnoDB,它们对索引的实现方式是不同的。 MyISAM data存的是数据地址。索引是索引,数据是数据。
因此,为什么不使用bigint存储手机号呢? 手机号一般是要加索引的吧。。bigint你用了like索引就失效了 1.首先,手机号的本质是字符串而不是数字,只是恰巧长得像数字而已。...,依然不够,第二位从0到9分库分表,还剩下9位,这对于int来说,能够存储了; 我一直认为对于数字的处理,交给数字类型比较好,所有才会有这样的想法,int对比varchar总该有性能提升吧;当然这样做,...那int实现的扩展性将是致命的; 分析下来,int或许有些许性能优势,但其带来的复杂度和扩展上的劣势让我根本都不必动手,就打消了念头了;唉,也许这就是为什么大多数公司选择varchar存储手机号的原因吧
之前一直有过疑惑为什么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, 正好对应零时区的时间,这样子我们就不用考虑时区的问题
为什么使用ELK构建监控体系?...解决方案 为什么会选择Elastic-Stack技术栈呢?...下面详细聊聊我们具体怎么做的,做了哪些工作?...A:1、比如,一个车子的基本信息,包括很多区块部分,用hash确实非常好理解,但是过期之后整个hash都删除了,其实很多信息是固定的,不用定时过期的;2、拆分成小的string更合适。...Q9:如果公司缺乏足够的人力物力,是用ES、Prometheus还是Zabbix做监控比较适合呢?能分别说一下它们各自最适用的情况吗?
MySQL为什么选择B+Tree? 首先理解MySQL索引的几个原则 索引是什么? 是为了加速对表中数据行的检索而创建的一种分散存储的数据结构。...MySQL使用B+Tree的原因: B+Tree扫库、扫表能力更强。 B+Tree的磁盘读写能力更强。 B+Tree的排序能力更强。 B+Tree的传效率更稳定。...MySQL文件存储 两种类型的表: 两种类型的表 两种表的存储文件类型: 存储的文件 索引用Hash算法的缺点: 无法范围查询 无法排序 InnoDB引擎存储节点的规则 InnoDB采取的⽅式是:将数据划分为若
发生数据库服务器宕机、或者脏页未写入磁盘,可以通过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两阶段提交, 为什么需要两阶段提交? 其实所谓的两阶段就是把一个事务分成两个阶段来提交。
本文链接:https://blog.csdn.net/weixin_42528266/article/details/102785018 简介:为什么要⽤全⽂搜索引擎,⽽不⽤mysql做全⽂搜索呢...前⾔ 有⼈可能会问,为什么⼀定要⽤搜索引擎呢?...⽽且 Mysql,Oracle,SQL Server 等数据库⾥不是也能提供查询搜索功能,直接通过数据库查询不就可以了吗?...那为什么还要全⽂搜索引擎呢?我们从⼏个⻆度来说 数据类型 全⽂索引搜索很好的⽀持⾮结构化数据的搜索,可以更好地快速搜索⼤量存在的任何单词⾮结构化⽂本。...搜索性能 如果使⽤mysql做搜索,⽐如有个player表,这个表有user_name这个字段,我们要查找出user_name以james开头的球员,和含有James的球员。我们⼀般怎么做?
最近行情越来越卷了,给大家整理了互联网大厂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。
金九银十已经来了,整理了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两阶段提交, 为什么需要两阶段提交? 其实所谓的两阶段就是把一个事务分成两个阶段来提交。
(粉板)里面,并更新内存,更新就算完成了 InnoDB在适当时,将操作记录更新到磁盘,而这个更新往往是在系统比较空闲的时候做,这就像打烊以后掌柜做的事。...为什么需要两份日志? 最开始MySQL并无InnoDB,自带的是MyISAM,没有crash-safe的能力,binlog只能用于归档。...两阶段提交 为什么必须有“两阶段提交”? 为了让两份日志之间的逻辑一致。 思考怎样让数据库恢复到半个月内任意一秒的状态? binlog会记录所有的逻辑操作,并且采用“追加写”。...如果DBA承诺说半个月内可以恢复,那么备份系统中一定会保存最近半个月的所有binlog,同时系统会定期做整库备份。 “定期”取决于系统的重要性,可以是一天一备,也可以是一周一备。...为什么需要“两阶段提交” 由于redo log和binlog是两个独立的逻辑,如果不用两阶段提交,要么就是先写完redo log再写binlog,或者反序。
面试题1: MySQL为什么用B+树,而不用B树?...本地分析一般是在宿主机上安装代理,执行分析命令,上报到服务器 面试题3:Mysql主从的延迟怎么解决呢,有什么好的思路吗?...3.服务的基础架构在业务和mysql之间加入memcache或者redis的cache层。降低mysql的读压力。 4.不同业务的mysql物理上放在不同机器,分散压力。...然后我们再降低主库的压力,比如读写分离 面试题4:mysql隐式转换不走索引怎么办? 当操作符左右两边的数据类型不一致时,会发生隐式转换。...面试题6:我们也在用RocketMQ,之前的架构比较简单,公司准备做微服务化,现在让我负责这一块,感觉微服务就是拆分,想象不出有啥问题,心理有些没底,想问下都需要注意哪些点?
执行器 MySQL 通过分析器知道了你要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,开始执行语句。...redo log 用于回滚,binlog 用于恢复。 如果将 MySQL 恢复到某一天的某一秒 要做到这一点有个前提,就是要对 MySQL 数据库定期做整库备份。...当需要恢复到指定的某一秒时,比如某天下午两点发现中午十二点有一次误删表,需要找回数据,那你可以这么做: 首先,找到最近的一次全量备份,如果你运气好,可能就是昨天晚上的一个备份,从这个备份恢复到临时库;...你可能会问,处于 prepare 阶段的 redo log 加上完整 binlog,重启就能恢复,MySQL 为什么要这么设计?...还有一个问题,就是为什么不让 redo log 也承担 binlog 的功能?
mysql如何做到恢复半月内任意一秒的数据呢?...为什么会有两份日志呢?...如果你的 DBA 承诺说半个月内可以恢复,那么备份系统中一定会保存最近半个月的所有 binlog,同时系统会定期做整库备份。...这里的“定期”取决于系统的重要性,可以是一天一备,也可以是一周一备 当需要恢复到指定的某一秒时,比如某天下午两点发现中午十二点有一次误删表,需要找回数据,那你可以这么做: 首先,找到最近的一次全量备份...用反证法证明为什么需要两阶段提交 由于 redo log 和 binlog 是两个独立的逻辑,如果不用两阶段提交,要么就是先写完 redo log 再写 binlog,或者采用反过来的顺序。
Buffer Pool就是一块用于缓存MySQL磁盘数据的内存空间。 为什么要缓存MySQL磁盘数据呢?...今天的第一个日志——redo log登场了。 恢复 - redo log 顾名思义,redo是重做的意思,redo log就是重做日志的意思。 redo log是如何保证数据不会丢失的呢?...有redo log为什么还需要binlog呢?...但说实话,我觉得这些区别并不是redo log不能取代binlog的原因,MySQL官方完全可以调整redo log让他兼并binlog的能力,但他没有这么做,为什么呢?...我认为不用redo log取代binlog最大的原因是“没必要”。 为什么这么说呢? 第一点,binlog的生态已经建立起来。
(注:如果不这么做,假如一个日志提交成功的时候,另一个日志提交之前发生了数据库发生了崩溃,但是crash-safe恢复或者误删库恢复的时候可能造成二者数据不统一出现问题。)...这个参数我也建议你设置成 1,这样可以保证 MySQL 误删除操作(删除表数据,删除库数据) 通过binlog 仍可恢复。...如何查看这两种日志 关于日志系统的一些误区和疑问 大家会不会想有了redo日志就可以了,为什么还要出现binlog日志呢? 解答: redo日志是只要InnoDB引擎才提供的一个内容。...写入redo日志也是io操作,数据更新直接写入磁盘也是io操作,为什么说写入redo日志效率高节省io成本呢?...解答:redo日志的写入是顺序写入的,不用去“找位置”,而直接更新数据到磁盘的话,需要到磁盘中找到位置再写入,肯定前者的效率高。
领取专属 10元无门槛券
手把手带您无忧上云