逻辑日志:可以简单理解为记录的就是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(重做日志)都是数据库系统中用于提供持久性和恢复功能的日志,它们相似但又有一些关键的区别。
相同点:
- 日志类型:两者都是用于记录数据库发生的操作和更改的日志。
- 持久性:它们都用于确保数据库系统在发生崩溃或故障时能够恢复到一致的状态。
不同点:
- 记录级别:Binlog是逻辑日志,记录的是数据库逻辑操作,例如SQL语句的执行顺序、修改的数据等。Redo Log是物理日志,记录的是对数据库内部数据页的物理修改。
- 存放位置:Binlog存放在服务器的持久存储中,通常以文件形式存在。Redo Log存放在数据库的磁盘上,通常以特定的日志文件组织形式存在。
- 使用方式:Binlog通常用于复制(replication),可以通过将Binlog传输到其他服务器来实现数据备份和主从复制。Redo Log用于崩溃恢复过程,在数据库系统崩溃后,通过应用Redo Log中的日志来重新执行或恢复未完成的事务,保证数据库的一致性。
- 写入时机:Binlog在事务提交之后生成并写入磁盘,记录的是已经完成的事务。Redo Log在事务执行期间不断地记录物理修改,保证事务的原子性和持久性。
- 大小和性能:Binlog通常比Redo Log更大,因为它需要记录更多的信息用于数据库复制和恢复过程。Redo Log的写入是顺序的,可以通过顺序写入来提高性能。
- 写入方式:binlog是追加写,是指一份写到一定大小的时候会更换下一个文件,不会覆盖;redo log是循环写,日志空间大小固定。
- redo log是属于innoDB层面,binlog属于MySQL Server层面的,这样在数据库用别的存储引擎时可以达到一致性的要求。
Undolog
概念
撤销日志是为了支持事务的回滚操作而存在的,记录了已经执行但未提交的事务所执行的数据修改操作的反向操作。即insert操作会记录对应的delete操作,update操作会记录相反的update操作。
回滚日志,在insert、update、delete的时候产生的便于数据回滚的日志当insert的时候,产生的undo log日志只在回滚时需要,在事务提交后,可被立即删除。
而update、delete的时候,产生的undo log日志不仅在回滚时需要,在快照读时也需要,不会立即被删除
保证了事务的原子性和隔离性。
作用
- 事务回滚:如果事务要进行回滚操作(ROLLBACK),MySQL会使用撤销日志中的信息来撤销已经执行但未提交的事务的修改,将数据恢复到事务开始之前的状态。
- 并发控制(MVCC):撤销日志用于在并发环境中保证隔离性。在读取操作期间,撤销日志提供了已提交事务修改前的旧数据版本,以保证读取到的数据版本的一致性。