Mysql日志之binlog、redolog和undolog

本文详细介绍了MySQL中的逻辑日志Binlog(记录SQL语句),物理日志Redolog(事务持久化),以及Undolog(事务回滚支持)的区别和作用,强调了它们在数据复制、主从同步、故障恢复和并发控制中的关键角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

逻辑日志:可以简单理解为记录的就是sql语句
物理日志:因为mysql数据最终是保存在数据页中的,物理日志记录的就是数据页变更

Binlog

概念

二进制日志记录了对MySQL数据库所执行的所有修改操作,包括插入、更新和删除操作等。它是一种逻辑日志,记录了数据修改的语句。但是binlog不能保证系统崩溃或故障发生时仍能保持数据一致性和持久性。binlog是通过追加的方式进行写入的,可以通过max_binlog_size参数设置每个binlog文件的大小,当文件大小达到给定值之后,会生成新的文件来保存日志。

作用

  • 数据复制与主从复制:Binlog可以用于实现MySQL数据库的主从复制,在主数据库上生成的二进制日志可以被从数据库用于重现相同的数据修改操作,实现数据的同步复制。
  • 数据恢复:Binlog可以通过"mysqlbinlog"工具解析和回放,用于将数据库恢复到特定时间点或特定事件之前的状态。
  • 数据库迁移:可以将二进制日志应用到其他数据库实例中,用于数据库迁移和版本升级。
  • 审计和故障排查:通过分析二进制日志,可以了解数据库操作的历史记录,进行审计、故障排查和监控。

Redolog

事务在运行过程中,都是在内存的buffer pool修改页面,事务提交后修改的脏页并不会立刻刷盘,而是由后台进程或特定的刷盘线程异步地将脏页的修改写回到磁盘上对应的数据文件。立刻刷盘开销太大,一方面是一个页面可能就修改了一点点,将整个页面刷盘不值当,另一方面是一个事务会涉及不同的页面,如果将这些页面都刷盘会产生很多的随机IO。

概念

redolog记录了已经提交的事务所执行的数据修改操作。它是物理日志,记录了物理层面上的数据修改。redo log日志的大小是固定的,即记录满了以后就从头循环写。

保证了事务的持久性,即事务提交成功,对数据库的操作被永久保留了下来

作用

  • 数据持久化:重做日志用于确保已提交的事务的修改在系统崩溃或故障发生时可以持久化到磁盘中。
  • 数据库恢复:通过重做日志,可以在数据库崩溃或意外关闭后,将未持久化到磁盘的事务重新应用,使数据恢复到最近的一致状态。
  • 保证事务的持久性:在事务提交之前,重做日志确保事务的修改已写入日志文件,以确保即使系统崩溃,事务的修改依然是可恢复的。

 Binlog和Redolog的异同

Binlog(二进制日志)和Redo Log(重做日志)都是数据库系统中用于提供持久性和恢复功能的日志,它们相似但又有一些关键的区别。

相同点:

  1. 日志类型:两者都是用于记录数据库发生的操作和更改的日志。
  2. 持久性:它们都用于确保数据库系统在发生崩溃或故障时能够恢复到一致的状态。

不同点:

  1. 记录级别:Binlog是逻辑日志,记录的是数据库逻辑操作,例如SQL语句的执行顺序、修改的数据等。Redo Log是物理日志,记录的是对数据库内部数据页的物理修改。
  2. 存放位置:Binlog存放在服务器的持久存储中,通常以文件形式存在。Redo Log存放在数据库的磁盘上,通常以特定的日志文件组织形式存在。
  3. 使用方式:Binlog通常用于复制(replication),可以通过将Binlog传输到其他服务器来实现数据备份和主从复制。Redo Log用于崩溃恢复过程,在数据库系统崩溃后,通过应用Redo Log中的日志来重新执行或恢复未完成的事务,保证数据库的一致性。
  4. 写入时机:Binlog在事务提交之后生成并写入磁盘,记录的是已经完成的事务。Redo Log在事务执行期间不断地记录物理修改,保证事务的原子性和持久性。
  5. 大小和性能:Binlog通常比Redo Log更大,因为它需要记录更多的信息用于数据库复制和恢复过程。Redo Log的写入是顺序的,可以通过顺序写入来提高性能。
  6. 写入方式:binlog是追加写,是指一份写到一定大小的时候会更换下一个文件,不会覆盖;redo log是循环写,日志空间大小固定。
  7. redo log是属于innoDB层面,binlog属于MySQL Server层面的,这样在数据库用别的存储引擎时可以达到一致性的要求。

Undolog

概念

撤销日志是为了支持事务的回滚操作而存在的,记录了已经执行但未提交的事务所执行的数据修改操作的反向操作。即insert操作会记录对应的delete操作,update操作会记录相反的update操作。

回滚日志,在insert、update、delete的时候产生的便于数据回滚的日志当insert的时候,产生的undo log日志只在回滚时需要,在事务提交后,可被立即删除

而update、delete的时候,产生的undo log日志不仅在回滚时需要,在快照读时也需要,不会立即被删除

保证了事务的原子性和隔离性。

作用

  • 事务回滚:如果事务要进行回滚操作(ROLLBACK),MySQL会使用撤销日志中的信息来撤销已经执行但未提交的事务的修改,将数据恢复到事务开始之前的状态。
  • 并发控制(MVCC):撤销日志用于在并发环境中保证隔离性。在读取操作期间,撤销日志提供了已提交事务修改前的旧数据版本,以保证读取到的数据版本的一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值