binlog

MySQL的binlog二进制日志 或 归档日志)是一种记录数据库的更改操作的日志。它包含了对数据库进行的插入、更新删除操作的详细信息。binlog是以二进制格式存储可以用于恢复数据库数据复制和数据同步操作。具体来说,binlog记录了每个更改操作的SQL语句或数据修改内容,也被称为归档日志。

binlog 用于记录数据库执行的写入性操作(不包括查询)信息,以二进制的形式保存在磁盘中。binlog 是 mysql逻辑日志,并且由 Server 层进行记录,使用任何存储引擎的 mysql 数据库都会记录 binlog 日志。binlog 是通过追加方式进行写入的,可以通过max_binlog_size 参数设置每个 binlog文件大小,当文件大小达到给定值之后,会生成新的文件保存日志。

binlog使用场景

在实际应用中, binlog 的主要使用场景两个,分别是 主从复制 和 数据恢复 。

  1. 主从复制 :在 Master 端开启 binlog ,然后将 binlog发送各个 Slave 端, Slave 端重放 binlog 从而达到主从数据一致。
  2. 数据恢复 :通过使用 mysqlbinlog 工具恢复数据。

redolog

Redo log(重做日志)是InnoDB存储引擎特有的日志文件用于崩溃恢复时对未提交事务进行恢复。它记录了每次数修改操作的物理日志,包括InnoDB的数据页修改索引修改、插入缓冲insert buffer)等。Redo log的作用是确保事务提交持久化到磁盘上。

为什么需要redo log

我们知道事务的四大特性里面一个是 持久性 ,具体来说就是只要事务提交成功,那么对数据库做的修改就被永久保存下来了,不可能因为任何原因再回到原来的状态 。

那么 mysql如何保证一致性的呢?最简单的做法是在每次事务提交时候,将该事务涉及修改的数据页全部刷新到磁盘中。但是这么做会有严重的性能问题,主要体现在两个方面:

  1. 因为 Innodb 是以  为单位进行磁盘交互的,而一个事务很可能只修改一个数据页里面的几个字节,这个时候完整的数据页刷到磁盘的话,太浪费资源了!
  2. 一个事务可能涉及修改多个数据页,并且这些数据页在物理上并不连续,使用随机IO写入性能太差!

因此 mysql 设计了 redo log , 具体来说就是只记录事务对数据页做了哪些修改,这样就能完美地解决性能问题了(相对而言文件更小并且是顺序IO)。

Undo log

Undo log(撤销日志)是InnoDB存储引擎特有的日志文件,用于在事务回滚并发控制等操作时恢复数据的一致性。Undo log记录了事务执行过程中每个数据修改的反向操作,可以用于撤销未提交事务或回滚提交事务,并且在MVCC(多版本并发控制)中起到了重要作用。

数据库事务四大特性中有一个是 原子 ,具体来说就是 原子性是指对数据库的一系列操作,要么全部成功,要么全部失败,不可能出现部分成功的情况。实际上, 原子 底层就是通过 undo log 实现的。undo log主要记录了数据的逻辑变化,比如一条 INSERT 语句对应一条DELETE 的 undo log ,对于每个 UPDATE 语句对应一条相反的 UPDATE 的 undo log ,这样在发生错误时,就能回滚到事务之前的数据状态。同时, undo log 也是 MVCC(多版本并发控制)实现的关键。

原文地址:https://blog.csdn.net/qq_34640060/article/details/134729652

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_21926.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注