Mysql 中的三种常见的日志 redo log undo log binlog

Mysql 中的三种常见的日志 redo log 重做日志,undo log 回滚日志 ,binlog 二进制日志

 

Redo log 日志 undo log 都是用来操作事务的,mysql中只有InnoDB可以操作事务,所以这两个日志应该是InnoDB独有日志方式。Binlog 是执行器用来记录逻辑操作的操作的二进制日志。

Redo log 操作执行于事务操作之后,提交之前,要么不执行,执行就会被记录,所以数据库在发生故障时可以使用redo log 恢复。Redo log 大小固定,记录满了以后就从头循环写。

Binlog 日志模块是Mysql Server 层面的叫做归档日志。记录的是原始逻辑。

Undo log 记录与实务执行之前,记录的数据的上一个版本,可以用于回滚。

注意:

  1. Redo log 和undo log 记录的都是数据的改变,而binlog 记录的是逻辑的操作。
  2. InnoDB中日志远比数据要重要。
  3. 单条sql语句也不能保证事务。
  4. data buffer 中数据会在合适时间由存储引擎写入data file。

一条更新语句执行的顺序

update T set c=c+1 where ID = 2;

  1. 事务开启undo日志到log buffer
  2. 执行器先找引擎ID=2这一行。 ID是主键,引擎直接使用树搜索找到这一行。如果ID=2这一行所在数据本来就在内存中,就直接返回给执行器;否则需要直接从磁盘读入内存,然后再返回。
  3. 执行器拿到引擎给的行数据,把这个值加上1,比如原来是N,现在就是N+1,得到新的一行数据,再调用引擎接口写入这行数据。
  4. 引擎将这行数据更新到内存中(执行事务),同时将这个更新操作记录(事务操作)到redo buff,这个时候引擎告诉执行器状态为prepare,
  5. 执行器生成这个操作binlog,并把binlog写入磁盘。

执行器调用引擎提交事务,redo buffer 落盘,修改redo log 为提交态,更新完成。

一条语句执行的顺序

三种日志的不同

1、binglog 是service 层的  执行器的日志 常用于主从备份

2、redo log innodb 的日志 ,每一才修改不可能都去操作磁盘所以会将记录写在redo log 中

在存储引擎空闲时再根据redo log日志跟新磁盘。 用于异常恢复。

3、undolog 引擎层的日志,记录执行前的数据,用于回滚和多版本控制

彻底搞懂MySQL 的 redo log 、 binlog、undo log_沸羊羊_-CSDN博客

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值