⚠️Mysql 三大Log——Redo Log、Undo Log、Bin Log,以及Mysql的两阶段提交 吧拉吧拉吧拉吧拉吧拉

本文详细介绍了MySQL中的Redo Log、Undo Log和Bin Log,它们分别在事务持久性、原子性和数据恢复中起到关键作用。Redo Log用于保证数据的可靠性,Undo Log确保事务原子性,Bin Log记录数据变更以备恢复。文章还探讨了两阶段提交的机制,以确保数据一致性。
摘要由CSDN通过智能技术生成

关于这三个log,redo log 和 undo log 是归属于Innodb 存储引擎的 ,bin log 是归属于 mysql Server 这个层面的。
redo log 和 undo log 都是存储引擎层面上生成的日志,并且都记录了数据的修改,只不过 redo log记录的是"物理级别"上的页修改操作,undo log 记录的是逻辑操作日志,比如对某一行数据进行了INSERT语句操作,那么 undo log就记录一条与之相反的DELETE操作。

Redo Log —— 保证事务持久性,数据异常恢复和服务重启时页数据同步恢复

redo log作用是为了保证数据的可靠性,最终落盘。但是又为了提升写入速度引入了redo log(buffer),然后通过一些策略再落盘到对应的 redolog file 中,关于redolog需要注意一下几点:

  1. 当发生数据修改的时候,会不断产生redolog,这些redolog 会先写入redo log buffer,同时innodb引擎会在合适的时机将记录刷新到磁盘中
  2. redo log 的大小是固定的,是循环写的过程
  3. 有了redo log之后,innodb就可以保证即使数据库发生异常重启,之前的记录也不会丢失,叫做crash-safe
Redo 落盘细节和落盘配置方式

Mysql 在写日志的时候在用户空间有一个 log Buffer区域,对应在操作系统 内核空间有一个OS Buffer,通过一定的策略,对应的log buffer中的数据刷新到os buffer中,然后再将osbuffer中的数据刷新到log文件

如果数据更新到内存中,还没有进行持久化,也就是内存中已经存在,但是没有更新到磁盘中,如果这个时候断电,重启后磁盘和内存中数据会丢失,为了保证数据尽可能完整,mysql 提供了一个配置策略 ,有三个选项,即innodb_flush_log_at_trx_commit = 0|1|2。(默认是1)

innodb_flush_log_at_trx_commit 的配置

0:提交事务的时候 ,是每隔一秒把 log buffer 中的数据刷新到os buffer,并调用 fsync() 写入到log文件,也就是说一秒之前的日志都是保存在log buffer缓冲区中,如果宕机,重启可能会丢失1s 的数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值