mysql undo log、redo log、binlog、mvcc、Buffer Pool的关系

1、作用

MySQL中的undo log、redo log、binlog和MVCC(多版本并发控制)是数据库管理系统中的

重要概念,它们各自有不同的作用和关系。

  • Buffer Pool(缓冲池):

    • 作为InnoDB存储引擎的核心组件,Buffer Pool用于缓存从磁盘读取的数据页。所有的数据修改首先发生在内存中的缓冲池里,而不是直接写入磁盘。
  • Undo Log(撤销日志):

    • Undo log是用于撤销已执行的事务的日志。
    • 如果事务需要回滚,可以通过撤销日志将数据回滚到事务开始之前的状态。
    • 另外,Undo log也用于MVCC,以支持非锁定读取。
  • Redo Log(重做日志):

    • Redo log是一种持久化日志,用于确保事务的持久性。
    • 当事务对数据库进行修改时,这些修改首先被记录在redo log中,然后再异步地刷新到磁盘上的数据文件中。
    • 如果系统突然崩溃,重启时可以重新执行redo log中的操作,确保数据的完整性。
  • Binlog(二进制日志):

    • Binlog是MySQL的二进制日志系统,用于记录数据库的所有更改操作。
    • 它主要用于复制和恢复操作,例如主从复制和点时间恢复。
    • Binlog记录了SQL语句的具体内容和执行顺序,可以用于复制和恢复操作。
  • MVCC(多版本并发控制):

    • MVCC是一种并发控制的方法,允许多个事务同时读取同一数据,而不需要加锁。
    • 通过保存数据的不同版本,MVCC可以支持非锁定读取,提高并发性能。
    • Undo log在MVCC中用于保存旧的数据版本,以便其他事务可以读取旧的数据版本而不需要等待当前事务完成。

2、关系

  • Undo log、redo log、binlog和MVCC都是数据库管理系统中的重要组件,它们共同协作以实现数据库的高可用性、高性能和数据一致性。
  • 在InnoDB存储引擎中,redo log和undo log是紧密相关的。当事务对数据进行修改时,首先将修改记录在redo log中,同时也会生成相应的undo log。如果系统突然崩溃,重启时可以通过redo log进行重做操作,同时也可以使用undo log进行撤销操作。
  • Binlog与redo log和undo log也有关系。在将数据修改刷新到数据文件之前,先记录到redo log中,然后再通过binlog将相应的SQL语句记录到二进制日志中。这样,在主从复制或点时间恢复等场景中,可以利用binlog进行相应的操作。
  • MVCC与undo log也有关系。通过undo log,MVCC可以保存旧的数据版本,实现非锁定读取,提高并发性能。
  • Redo Log的写前日志(Write-Ahead Logging, WAL)策略:在Buffer Pool中修改数据后,不立即将数据写入磁盘,而是先将修改记录在Redo Log中,然后再由后台线程异步地将数据刷新到磁盘上。这种写前日志策略可以减少直接对磁盘进行写操作的次数,提高数据库的性能。
相关推荐
建投数据15 分钟前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi1 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀1 小时前
Redis梳理
数据库·redis·缓存
独行soc1 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天2 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
工业甲酰苯胺2 小时前
分布式系统架构:服务容错
数据库·架构
独行soc3 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍08-基于时间延迟的SQL注入(Time-Based SQL Injection)
数据库·sql·安全·渗透测试·漏洞挖掘
White_Mountain3 小时前
在Ubuntu中配置mysql,并允许外部访问数据库
数据库·mysql·ubuntu
Code apprenticeship3 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存
百度智能云技术站3 小时前
广告投放系统成本降低 70%+,基于 Redis 容量型数据库 PegaDB 的方案设计和业务实践
数据库·redis·oracle