MySQL中,redolog 和 binlog 有什么区别?

概述

redo log(重做日志)和 binlog(归档日志)都是 MySQL 的重要的日志,它们的区别如下:

  • redo log 是物理日志,记录的是“在某个数据页上做了什么修改”。
  • binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。
  • redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。
  • redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

最开始 MySQL 里并没有 InnoDB 引擎,MySQL 自带的引擎是 MyISAM,但是 MyISAM 没有 crash-safe 的能力,binlog 日志只能用于归档。而 InnoDB 是另一个公司以插件形式引入 MySQL 的,既然只依靠 binlog 是没有 crash-safe 能力的,所以 InnoDB 使用另外一套日志系统,也就是 redo log 来实现 crash-safe 能力。

more

在MySQL中,redo log(重做日志)和binlog(二进制日志)是两种不同的日志类型,用于不同的目的。

  1. Redo Log(重做日志):
  • Redo log是InnoDB存储引擎特有的日志,用于保证事务的持久性和一致性。
  • Redo log记录了正在进行中的事务对数据所做的修改操作,包括插入、更新和删除操作。
  • Redo log以循环写入的方式记录,即当日志写满时,会从头开始覆盖之前的日志。
  • Redo log是物理日志,记录了数据页的物理修改,用于在数据库崩溃或意外关闭时进行恢复。
  • Redo log的写入是通过顺序IO操作,具有较低的开销,可以提高数据库的写入性能。
  1. Binlog(二进制日志):
  • Binlog是MySQL服务器的日志,记录了对数据库执行的所有更改操作,包括数据定义语言(DDL)和数据操作语言(DML)。
  • Binlog以追加写入的方式记录,即每次写入都追加到日志的末尾,不会覆盖之前的日志。
  • Binlog是逻辑日志,记录了对数据库的逻辑更改,如SQL语句的原始文本。
  • Binlog用于实现数据复制(主从复制)和数据恢复,可以将一个服务器上的操作复制到其他服务器上,实现数据的同步和备份。
  • Binlog的写入是通过随机IO操作,相对于redo log会有更高的开销,但可以提供更全面的日志信息。

在功能上,redo log主要用于保证事务的持久性和一致性,用于数据库的崩溃恢复,而binlog主要用于数据复制和恢复,用于实现主从复制和故障恢复。它们的使用场景和运行机制有所不同,但都是关键的日志组件,确保数据的可靠性和一致性。