mysql redolog undolog binlog详解,以及它们之间的区别

三种日志介绍

MySQL中的Redo Log(重做日志)、Undo Log(撤销日志)和Binlog(二进制日志)是三种不同的日志类型,它们在数据库中扮演不同的角色和功能。

  1. Redo Log(重做日志):

    • Redo Log是MySQL用于实现事务的持久性和崩溃恢复的一种日志记录机制。
    • Redo Log记录了对数据库进行的修改操作,包括插入、更新和删除等,而不包括查询操作。
    • Redo Log以顺序的方式将修改操作写入磁盘,通常是写入磁盘上的重做日志文件(Redo Log File)。
    • Redo Log的目的是在数据库崩溃时,通过重放Redo Log中的操作,将数据库恢复到崩溃前的状态。
  2. Undo Log(撤销日志):

    • Undo Log用于实现MySQL的事务隔离级别和回滚操作。
    • Undo Log记录了事务对数据库进行的修改操作的逆操作,以便在回滚事务时撤销对数据库的修改。
    • Undo Log以逻辑方式记录了事务执行前的数据值,在事务回滚时使用Undo Log中的信息将数据还原到事务开始前的状态。
    • Undo Log一般存储在回滚段(Rollback Segment)中,用于支持事务的回滚和MVCC(多版本并发控制)。
  3. Binlog(二进制日志):

    • Binlog是MySQL用于实现数据复制和数据恢复的一种日志记录机制。
    • Binlog记录了对数据库进行的所有修改操作,包括数据修改和数据查询操作。
    • Binlog以二进制格式记录了每个修改操作的详细信息,包括操作类型、受影响的数据、时间戳等。
    • Binlog通常用于主从复制,其中主服务器将Binlog发送给从服务器,从服务器根据Binlog的内容来复制主服务器上的操作,以保持数据的一致性。

区别

  • Redo Log和Undo Log都是在数据库引擎层面实现的,而Binlog是在服务器层面实现的。
  • Redo Log主要用于崩溃恢复,记录了对数据库的物理修改操作;Undo Log主要用于回滚和事务隔离,记录了事务的逻辑修改操作。
  • Redo Log是顺序写入磁盘的,而Undo Log通常是随机写入磁盘的。
  • Binlog用于主从复制,记录了所有的数据库修改操作,以便在从服务器上复制主服务器的操作并保持数据一致性。

这些日志在MySQL中扮演着不同的角色,协同工作以实现事务的持久性、崩溃恢复、回滚和数据复制等功能。它们共同构成了MySQL数据库引擎的核心日志系统。

数据格式

Redo Log(重做日志)和Undo Log(撤销日志)在MySQL中都是以二进制格式进行存储的。

  1. Redo Log(重做日志):

    • Redo Log是以二进制格式记录的,它记录了对数据库进行的物理修改操作。
    • Redo Log的二进制格式包含了被修改的数据块的物理位置、修改前后的值等信息。
    • Redo Log以顺序追加的方式写入磁盘上的重做日志文件(Redo Log File),保证了高性能的写入操作。
  2. Undo Log(撤销日志):

    • Undo Log也是以二进制格式记录的,它记录了事务对数据库进行的逻辑修改操作的逆操作。
    • Undo Log的二进制格式包含了被修改的数据块的逻辑修改前后的值等信息。
    • Undo Log以事务为单位进行记录,支持回滚操作和MVCC(多版本并发控制)。

需要注意的是,Redo Log和Undo Log的二进制格式并不是直接可读的,它们是数据库引擎内部使用的数据结构,存储在磁盘上的特定文件中。只有数据库引擎能够理解和解析这些二进制日志,以实现数据的持久性、崩溃恢复、回滚和MVCC等功能。

另外,与Redo Log和Undo Log不同,Binlog(二进制日志)不是以二进制格式存储在数据库引擎内部,而是作为一种独立的日志文件存储在磁盘上。Binlog记录了对数据库的所有修改操作,包括数据修改和查询操作,以便进行数据复制和数据恢复。Binlog的二进制格式可以通过特定的工具进行解析和分析。

猜你喜欢

转载自blog.csdn.net/a772304419/article/details/131039924
今日推荐