3000帧动画图解MySQL为什么需要binlog、redo log和undo log

本文介绍了MySQL中binlog、redo log和undo log的作用及其背后的机制。Buffer Pool作为内存缓存,通过redo log保证数据在断电后的恢复,而undo log用于事务回滚。binlog则主要用于数据归档和复制。文章讨论了不同日志的刷盘策略,并总结了MySQL分层设计的优势。
摘要由CSDN通过智能技术生成
先看一条SQL如何入库的:

这是一条很简单的更新SQL,从MySQL服务端接收到SQL到落盘,先后经过了MySQL Server层和InnoDB存储引擎。

  1. Server层就像一个产品经理,分析客户的需求,并给出实现需求的方案。
  2. InnoDB就像一个基层程序员,实现产品经理给出的具体方案。

在MySQL”分析需求,实现方案“的过程中,还夹杂着内存操作和磁盘操作,以及记录各种日志。

他们到底有什么用处?他们之间到底怎么配合的?MySQL又为什么要分层呢?InnoDB里面的那一块Buffer Pool又是什么?

我们慢慢分析。

分层结构

MySQL为什么要分为Server层和存储引擎两层呢?

这个问题官方也没有给出明确的答案,但是也不难猜,简单来说就是为了“解耦”。

Server层和存储引擎各司其职,分工明确,用户可以根据不同的需求去使用合适的存储引擎,多好的设计,对不对?

后来的发展也验证了“分层设计”的优越性:

MySQL最初搭载的存储引擎是自研的只支持简单查询的MyISAM的前身ISAM,后来与Sleepycat合作研发了Berkeley DB引擎,支持了事务。

江山代有才人出,技术后浪推前浪,MySQL在持续的升级着自己的存储引擎的过程中,遇到了横空出世的InnoDB,InnoDB的功能强大让MySQL倍感压力。

自己的存储引擎打不过InnoDB怎么办?

打不过就加入!

MySQL选择了和InnoDB合作。正是因为MySQL存储引擎的插件化设计,两个公司合作的非常顺利,MySQL也在合作后不久就发布了正式支持nnoDB的4.0版本以及经典的4.1版本。

MySQL兼并天下模式也成为MySQL走向繁荣的一个重要因素。这能让MySQL长久地保持着极强竞争力。

时至今日,MySQL依然占据着极高数据库市场份额,仅次于王牌数据库Oracle。

Buffer Pool

在InnoDB里,有一块非常重要的结构——Buffer Pool。

Buffer Pool是个什么东西呢?

Buffer Pool就是一块用于缓存MySQL磁盘数据的内存空间。

为什么要缓存MySQL磁盘数据呢?

我们通过一个例子说明,我们先假设没有Buffer Pool,user表里面只有一条记录,记录的age = 1,假设需要执行三条SQL:

  1. 事务A:update user set age = 2
  2. 事务B:update user set age = 3
  3. 事务C:update user set age = 4

如果没有Buffer Pool,那执行就是这样的:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值