MySQL为了提高性能,你对它数据行的增、删、改操作其实都优先发生在内存(Buffer Pool)中。那你想,假如你update了某些数据,Buffer Pool中的数据页也就会被你改成脏数据页。那万一你刚修改完并提交了事物,还没来得及将数据落盘MYSQL就宕机了怎么办? 当MySQL重启的时候需要把方才修改的内容恢复出来吧,不然数据就不一致了。那怎么恢复呢?就借助redo log恢复。因为前面说
转载 2023-08-18 13:58:11
99阅读
作者:宋利兵0、导读本文介绍了InnoDB引擎如何利用Undo Log和Redo Log来保证事务的原子性、持久性原理,以及InnoDB引擎实现Undo Log和Redo Log的基本思路。00 – Undo Log Undo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,采用Undo Log来实现多版本并发控制(简称 MVCC)。- 事务的原子性(Atomicity)
前言数据库系统与文件系统最大的区别在于数据库能保证操作的原子性,一个操作要么不做要么都做,即使在数据库宕机的情况下,也不会出现操作一半的情况,这个就需要数据库的日志和一套完善的崩溃恢复机制来保证。本文仔细剖析了InnoDB的崩溃恢复流程,代码基于5.6分支。基础知识***lsn: *** 可以理解为数据库从创建以来产生的redo日志量,这个值越大,说明数据库的更新越多,也可以理解为更新的时刻。此外
转载 2024-02-20 11:33:21
42阅读
概述数据库系统与文件系统最大的区别在于数据库能保证操作的原子性,一个操作要么不做要么都做,即使在数据库宕机的情况下,也不会出现操作一半的情况,这个就需要数据库的日志和一套完善的崩溃恢复机制来保证。下面简单介绍一下InnoDB的崩溃恢复流程。相关概念 lsn: 可以理解为数据库从创建以来产生的redo日志量,这个值越大,说明数据库的更新越多,也可以理解为更新的时刻。此外,每个数据页上也有
在之前的文章「简单了解InnoDB底层原理」聊了一下MySQL的Buffer Pool。这里再简单提一嘴,Buffer Pool是MySQL内存结构中十分核心的一个组成,你可以先把它想象成一个黑盒子。黑盒下的更新数据流程当我们查询数据的时候,会先去Buffer Pool中查询。如果Buffer Pool中不存在,存储引擎会先将数据从磁盘加载到Buffer Pool中,然后将数据返回给客户端;同理,
转载 2024-05-18 17:17:16
78阅读
MySQL5.7之前的版本中, InnoDB每次做crash recovery之前都需要扫描数据目录,打开每个文件并创建内存对象。当目录下文件个数特别多时,会严重影响到崩溃恢复的速度。为了解决这个问题,MySQL5.7通过结合checkpoint + 标注被修改的文件的方式,从一个checkpoint点开始,可以找到所有崩溃恢复需要打开的文件,从而避免扫描数据目录。本文简单的记录了相关的代码,以
天有不测风云,数据库有旦夕祸福。前面写 Redo 日志的文章介绍过,数据库正常运行时,Redo 日志就是个累赘。现在,终于到了 Redo 日志扬眉吐气,大显身手的时候了。本文我们一起来看看,MySQL崩溃恢复过程中都干了哪些事情,Redo 日志又是怎么大显身手的。本文介绍的崩溃恢复过程,包含 server 层和 InnoDB,不涉及其它存储引擎,内容基于 MySQ
转载 2023-08-11 18:42:09
1232阅读
1点赞
本文将结合MySQL 8.0.19 分析InnoDB崩溃恢复的拉起过程,包括恢复前的准备工作,redo回放,undo回滚,以及崩溃恢复后Crash Safe DDL的实现。其中重点介绍redo的回放。整体的代码流程如下,InnoDB崩溃恢复的流程是从srv_start, innobase_dict_recover ,ha_post_recover这三个函数中展开,后文会详细介绍。|-->my
Redis宕机,如何避免数据丢失和快速恢复? 你会把Redis应用到什么业务场景上?你大概率会说:“会把它当缓存使用,直接从内存读取数据,响应速度快”。没错,这是Redis最普遍使用的业务场景,但是不可忽视一个问题:一旦服务器宕机,内存中的数据将全部丢失。 首先可能大家很容易想到的一个解决方案是:从后端数据库恢复这些数据。这个方案会带来2个问题:一是,需要频繁访问数据库,会给数据库带来巨大的压力;
转载 2023-08-15 17:01:30
114阅读
在实际的生产环境中,Redis 通常被用作缓存、消息队列、实时计数器等应用场景。在这些场景下,数据的正确性和可靠性是至关重要的。为了保证 Redis 的数据不会因为各种原因而丢失,Redis 提供了持久化功能。Redis 提供了两种持久化方式:RDB 模式:该模式定期或根据操作次数触发对 Redis 内存中的数据进行备份,并生成一个快照文件。当需要从磁盘中恢复 Redis 数据时,只需要读取该文件
转载 2023-08-15 12:42:56
170阅读
数据库系统与文件系统最大的区别在于数据库能保证操作的原子性,一个操作要么不做要么都做,即使在数据库宕机的情况下,也不会出现操作一半的情况,这个就需要数据库的日志和一套完善的崩溃恢复机制来保证。下面简单介绍一下InnoDB的崩溃恢复流程。相关概念   lsn: 可以理解为数据库从创建以来产生的redo日志量,这个值越大,说明数据库的更新越多,也可以理解为更新的
思考一个问题为什么在你当update时,事物提交之前先不断的写redo log呢?如果你看过白日梦前面介绍buffer pool的文章,这个问题的答案想必你也能很快的想出来:MySQL为了提高性能,你对它数据行的增、删、改操作其实都优先发生在内存(Buffer Pool)中。那你想,假如你update了某些数据,Buffer Pool中的数据页也就会被你改成脏数据页。那万一你刚修改完并提交了事物,
redis持久化的意义,在于故障恢复比如你部署了一个redis,作为cache缓存,当然也可以保存一些较为重要的数据如果没有持久化的话,redis遇到灾难性故障的时候,就会丢失所有的数据如果通过持久化将数据搞一份儿在磁盘上去,然后定期比如说同步和备份到一些云存储服务上去,那么就可以保证数据不丢失全部,还是可以恢复一部分数据回来的1、RDB和AOF两种持久化机制的介绍rdb和aof比较rdbaoff
转载 2024-06-19 05:39:10
31阅读
恢复机制是数据库系统必不可少的组成部分,它负责将数据库恢复到故障发生前的一致的状态高可用性:必须将数据库崩溃后不能使用的时间缩减到最短   故障分类:  * 事务故障:    1 逻辑错误,    2 系统错误,如死锁  * 系统崩溃  * 磁盘故障  恢复算法:    1 在正常事务处理时采取措施,保证有足够的信息可用于故障恢复    2 故障发生后采取措施,将数据
mysql的配置文件my.cnf里找到 [mysqld]字段下,添加 innodb_force_recovery = 1如果innodb_force_recovery = 1不生效,则可尝试2——6几个数字然后重启mysql,重启成功。然后使用mysqldump或 pma 导出数据,执行修复操作等。修复完成后,把该参
转载 2023-06-25 11:52:59
317阅读
思考一个问题为什么在你当update时,事物提交之前先不断的写redo log呢?如果你看过白日梦前面介绍buffer pool的文章,这个问题的答案想必你也能很快的想出来:MySQL为了提高性能,你对它数据行的增、删、改操作其实都优先发生在内存(Buffer Pool)中。那你想,假如你update了某些数据,Buffer Pool中的数据页也就会被你改成脏数据页。那万一你刚修改完并提交了事物,
转载 2023-11-01 18:47:29
57阅读
数据库系统与文件系统最大的区别在于数据库能保证操作的原子性,一个操作要么不做要么都做,即使在数据库宕机的情况下,也不会出现操作一半的情况,这个就需要数据库的日志和一套完善的崩溃恢复机制来保证。本文仔细剖析了InnoDB的崩溃恢复流程,代码基于5.6分支。基础知识lsn: 可以理解为数据库从创建以来产生的redo日志量,这个值越大,说明数据库的更新越多,也可以理解为更新的时刻。此外
转载 2024-06-04 08:00:03
24阅读
许多人都有这样一种映像,NodeJS比较快; 但是因为其是单线程,所以它不稳定,有点不安全,不适合处理复杂业务; 它比较适合对并发要求比较高,而且简单的业务场景。 在Express的作者的TJ Holowaychuk的 告别Node.js一文中列举了以下罪状: Farewell NodeJS (TJ Holowaychuk) ·   yo
InnoDB: The log sequence number in ibdata files does not matchInnoDB: the log sequence number in the ib_logfiles!有资料说,将my.cnf增加一行“innodb_force_recovery = 4”,让mysql强制恢复innodb,或使用“innodb_force_recovery
原创 2016-06-13 16:47:24
1165阅读
MySQL · 引擎特性 · InnoDB 崩溃恢复过程在前面两期月报中,我们详细介绍了 InnoDB redo log 和 undo log 的相关知识,本文将介绍 InnoDB 在崩溃恢复时的主要流程。本文代码分析基于 MySQL 5.7.7-RC 版本,函数入口为 innobase_start_or_create_for_mysql,这是一个非常冗长的函数,本文只涉及和崩溃恢复相关
转载 2023-12-07 17:13:17
76阅读
  • 1
  • 2
  • 3
  • 4
  • 5