本文最后更新于673 天前,其中的信息可能已经过时,如有错误请发送邮件到2763981847@qq.com
MySQL 的三种日志binlog、redolog、undolog 分别有什么作用、有什么区别?
MySQL 是一款流行的关系型数据库,其日志是其关键功能之一。MySQL 包括三种类型的日志,分别是 binlog、redolog 和 undolog,它们分别有不同的作用和特点。
- binlog ,binlog(Binary log)是 MySQL 中的二进制日志文件,用于记录 MySQL 服务器上的所有更新和修改操作。它可以记录所有的 DDL(Data Definition Language)和 DML(Data Modification Language)操作,包括对表结构的更改、数据的插入、修改、删除等等。binlog是在事务提交后生成的,因此可以用于恢复数据库。
- redolog ,redolog(Redo log)用于恢复数据,保证数据的一致性和持久性。当 MySQL 发生修改时,redolog 会将这些操作记录下来,并写入磁盘。这样,当 MySQL 发生宕机或崩溃时,通过重放 redolog 就可以恢复数据。
- undolog,undolog(Undo log)用于回滚操作。当 MySQL 发生事务回滚时,undolog 会记录这些操作并将其写入磁盘。这样,当 MySQL 需要回滚时,通过重放 undolog 就可以回滚事务。
区别:
- binlog 和 redolog 都是 MySQL 中的二进制日志,但是它们的作用和实现方式有所不同。binlog 是 MySQL 记录所有的操作,而 redolog 则是用于保证数据的一致性和持久性。此外,binlog 是逻辑日志,redolog 是物理日志。binlog 记录的是SQL语句,而 redolog 记录的是数据页的修改,所以 binlog 可以跨平台使用,而 redolog 不能。undolog 和 redolog 的区别是,undolog 是用于回滚操作的,而 redolog 是用于恢复数据的。
补充:
- binlog 和 redolog 的记录粒度不同。binlog 记录的是整个 SQL 语句,而 redolog 记录的是操作某个数据页的具体修改内容。因此,在执行一个 SQL 语句时,可能会产生多个 redolog 记录。
- binlog 和 redolog 的写入时间不同。binlog 是在事务提交后生成的,而 redolog 是在事务执行时就开始写入的。
- binlog 和 redolog 的作用不同。binlog 主要用于数据备份和复制,而 redolog 主要用于崩溃恢复和故障转移。
- undolog 和 redolog 一起使用,用于实现 MySQL 的 MVCC(多版本并发控制)功能。在 MVCC 中,undolog 记录了当前正在执行的事务所做的修改,而 redolog 记录了已经提交的事务所做的修改。这样,在查询时可以根据查询的时间点来选择合适的版本。
- MySQL 8.0 引入了新的 redo log 格式,称为“redo log 多线程写入”(Multi-Threaded Redo Log)或“redo log 引擎”(Redo Log Engine)。这个新的 redo log 格式可以提高 MySQL 的写入性能,特别是在高并发环境下。同时,MySQL 8.0 也引入了“Undo Log 分区”(Undo Log Partitions)的功能,可以将 Undo Log 分成多个区域,从而提高 MySQL 的并发能力。