《MySQL实战45讲》学习笔记02 | 日志系统: 一条SQL更新语句是如何执行的?

本笔记记录的是学习过程中的重要概念要点,类似于提纲式笔记。如有侵权,请联系删除。

执行语句:mysql> create table T(ID int primary key, c int);

更新流程还涉及两个重要的日志模块: redo log(重做日志) 和 binlog(归档日志) 。

redo log

  1. InnoDB所特有的日志文件。
  2. 记录的是物理日志,也就是更改的数据信息。
  3. 循环写入的。拥有两个指针,一个是checkpoint,一个是write pos。分别记录擦除的位置和目前写入的位置。
  4. 保证crash-safe:即使数据库发生异常重启, 之前提交的记录都不会丢失。
  5. redo log用于保证crash-safe能力。 innodb_flush_log_at_trx_commit这个参数设置成1的时候,表示每次事务的redo log都直接持久化到磁盘。 建议设置成1, 这样可以保证MySQL异常重启之后数据不丢失。

binlog

  1. Server 层所拥有的日志模块。
  2. 所有的引擎所共用
  3. 记录的是逻辑记录,即每一个命令的这个语句的原始逻辑含义
  4. 追加写录的,不会覆盖之前的记录信息。
  5. sync_binlog这个参数设置成1的时候, 表示每次事务的binlog都持久化到磁盘。 建议设置成1, 这样可以保证MySQL异常重启之后binlog不丢失。

内部流程

图中浅色框表示是在InnoDB内部执行的, 深色框表示是在执行器中执行的:
在这里插入图片描述
两阶段提交:为了保证两份日志之间的逻辑。

思考

在什么场景下, 一天一备会比一周一备更有优势呢? 或者说, 它影响了这个数据库系统的哪个指标?
答:在一天一备的模式里,最坏情况下需要应用一天的 binlog。一周一备最坏情况就要应用一周的 binlog 了。
系统的对应指标就是RTO(恢复目标时间)。成本是更频繁全量备份需要消耗更多存储空间,需要你根据业务重要新来评估了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值