Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Innodb如何实现事务的持久化

Innodb如何实现事务的持久化

作者头像
十毛
发布于 2021-07-29 08:00:18
发布于 2021-07-29 08:00:18
6200
举报

1. Write Ahead Log保证持久化

先写redo log(同时写Log Sequence Number,简称LSN),redo log是逻辑和物理结合的日志,使用物理的方式定位到数据页,页内操作是逻辑的,所以为了保证数据的一致性,需要使用double write技术

2. 应用redo log更新数据

每写一次redo log buffer,就更新内存中的数据页,同时在数据页写入redolog对应的LSN。

3. 持久化redolog

在事务提交时写入磁盘,保证了数据持久化,宕机后可以根据redolog恢复数据

  • redo log buffer -> redo log(事务提交的时候)

这里需要注意的就是: 数据页此时并不会持久化到磁盘,而是会择机异步刷盘,刷盘的时候会记录LSN,称之为checkpoint

4. 重启后的故障恢复

checkpoint,以及大于checkpoint的redo log,然后根据redolog修改数据页,修改数据页的时候也需要检查数据页的LSN是否小于当前redolog的LSN,如果小于则更新,否则就说明数据页不需要更新

参考

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL持久化不为人知的一面⭐️卡顿现象的根源与对策
2024新年新气象,小菜同学又踏上了求职之路,但求职路艰辛,新年第一次面试又被面试官给问住了
菜菜的后端私房菜
2024/06/25
4161
关于MySQL,这篇都没人赞,太没天理了!
mysqldump的产出物是一个包含了建表,插入数据的SQL语句集合,类似于这样:
架构师之路
2021/09/07
4040
简单聊聊Innodb崩溃恢复那些事
本文想用简单精炼的语言将Innodb崩溃恢复那些事情好好拾到拾到,本文主要参考以下三本书和我个人一些感想而作:
大忽悠爱学习
2023/10/11
6320
简单聊聊Innodb崩溃恢复那些事
🍑 MySQL事务日志 redo log 详解:
Innodb存储引擎是以页为单位来管理存储空间的。在真正访问页面之前,需要把在磁盘上的页缓存到内存中的Buffer Pool之后才可以访问。所有的变更都必须先更新缓冲池中的数据,然后缓冲池中的脏页会以一定的频率被刷入磁盘(Check Point机制),通过缓冲池来优化CPU和磁盘之间的鸿沟,这样就可以保证整体的性能不会下降太快。
爱吃糖的范同学
2023/02/15
1.9K0
一文搞懂回滚和持久化
redo log 事务的支持是数据库区分文件系统的重要特征之一,事务的四大特性: 原子性:所有的操作要么都做,要么都不做,不可分割。 一致性:数据库从一种状态变成另一种状态的的结果最终是一致的,比如A给B转账500,A最终少了500,B最终多了500,但是A+B的值始终没变。 隔离性:事务和事务之前相互隔离,互不干扰。 持久性:事务一旦提交,它对数据的变更是永久性的。 本篇文章主要说说持久性相关的知识。 当我们在事务中更新一条记录的时候,比如: update user set age=11 where u
用户8851537
2021/09/17
7990
Mysql底层原理超详细,一文速通
里面的三个核心组件, 解析器, 优化器, 执行器,负责完成服务层的核心功能, 其中三个核心组件的交互流程大致如下, 解析器将sql语句转换为解析树, 优化器选择最优的执行方案, 执行器根据计划调用存储引擎执行对应操作并返回结果, 有点类似于公司老总负责将公司战略拆分为一个个小目标分发给公司高管, 然后公司高管决策, 已最高效率达到目的,之后再将任务拆分,给我们打工人, 之后打工人来负责执行
天下之猴
2024/10/01
4231
Mysql底层原理超详细,一文速通
面试官的灵魂一击:你懂 MySQL 事务日志吗?
大家都清楚,日志是 MySQL 数据库的重要组成部分,记录着数据库运行期间各种状态信息。MySQL 日志主要包括「错误日志」、「查询日志」、「慢查询日志」、「二进制日志(binlog)」 和 事务日志(redo log、undo log)几大类。
用户6543014
2020/12/08
4690
面试官的灵魂一击:你懂 MySQL 事务日志吗?
mysql 异常情况下的事务安全 -- 详解 mysql redolog
上一篇文章中,我们介绍了 mysql 的二进制日志 binlog,他为数据的同步、恢复和回滚提供了非常便利的支持。 怎么避免从删库到跑路 — 详解 mysql binlog 的配置与使用
用户3147702
2022/06/27
5330
mysql 异常情况下的事务安全 -- 详解 mysql redolog
MySQL Binlog/Redolog和CrashSafe机制
redo log是MySQL InnoDB的日志, 是物理日志, 记录的是"在某个数据页上做了什么修改"
code-x
2022/12/12
9530
01 | 日志系统:一条SQL更新语句是如何执行的?
我们还是从一个表的一条更新语句说起,下面是这个表的创建语句,这个表有一个主键 ID 和一个整型字段 c: mysql> create table T(ID int primary key, c int); 如果要将 ID=2 这一行的值加 1,SQL 语句就会这么写: mysql> update T set c=c+1 where ID=2;
名字是乱打的
2021/12/24
4670
01 | 日志系统:一条SQL更新语句是如何执行的?
MySQL,在线热备的内核原理!
为了把问题讲透,这就要从redo log,从LSN,从MySQL的故障恢复(crash-recovery)机制聊起。
用户1263954
2021/10/25
1.2K0
大白话 mysql 之详细分析 mysql 事务日志
虽然可能大部分文章都有介绍过,但为了文章的完整性,我们还是从 redo log 和 binlog 的区别聊起。
会玩code
2022/04/24
7950
大白话 mysql 之详细分析 mysql 事务日志
MySQL中事务的持久性实现原理
说到数据库事务,大家脑子里一定很容易蹦出一堆事务的相关知识,如事务的ACID特性,隔离级别,解决的问题(脏读,不可重复读,幻读)等等,但是可能很少有人真正的清楚事务的这些特性又是怎么实现的,为什么要有四个隔离级别。
X先生
2020/11/17
1.2K0
必须了解的mysql三大日志-binlog、redo log和undo log
来自:https://juejin.im/post/6860252224930070536
用户6543014
2020/09/10
1.8K0
必须了解的mysql三大日志-binlog、redo log和undo log
【MySQL (六) | 详细分析MySQL事务日志redo log】
为了最大程度避免数据写入时 IO 瓶颈带来的性能问题,MySQL 采用了这样一种缓存机制:
周三不加班
2019/09/03
3.3K0
【MySQL (六) | 详细分析MySQL事务日志redo log】
第14章_MySQL事务日志
🧑个人简介:大家好,我是 shark-Gao,一个想要与大家共同进步的男人😉😉
程序员Leo
2023/08/02
2250
第14章_MySQL事务日志
MySQL的事务实现原理介绍:undo log、redo log、checkpoint和LSN
参考博客1(建议先通读该博客)介绍了MySQL通过Undo+Redo Log的机制实现了事务的原子性、一致性和持久性(关于事务的隔离性是通过锁机制来保障的,请参考我的另一篇博文MySQL常见的七种锁详细介绍)。文章中提到:
saintyyu
2021/11/22
1K0
CMU 15-445 -- Logging Schemes - 17
本系列为 CMU 15-445 Fall 2022 Database Systems 数据库系统 [卡内基梅隆] 课程重点知识点摘录,附加个人拙见,同样借助CMU 15-445课程内容来完成MIT 6.830 lab内容。
大忽悠爱学习
2023/10/11
2230
CMU 15-445 -- Logging Schemes - 17
Mysql各种日志binlog、redolog、undolog——Mysql系列(二)
https://segmentfault.com/a/1190000041758784
翰墨飘香
2023/06/11
3.3K0
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
MySQL作为最流行的开源数据库,其重要性不言而喻。日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息。常见的日志有以下几种:
寻求出路的程序媛
2025/02/06
3680
MySQL日志详解——日志分类、二进制日志bin log、回滚日志undo log、重做日志redo log
推荐阅读
相关推荐
MySQL持久化不为人知的一面⭐️卡顿现象的根源与对策
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文