InnoDB 是 MySQL 的一个存储引擎。存储引擎是数据库管理系统 (DBMS) 用来创建、读取、更新数据库中的数据的底层软件组件。

InnoDB 存储引擎使用一种叫做 “重做日志”(redo log)的机制来保证数据的完整性和一致性。

重做日志是一种物理日志,用于记录数据页的物理变化,而不是记录 SQL 语句。这是一种写前日志(write-ahead logging, WAL)策略,意味着在任何数据被写入数据文件之前,都会首先写入重做日志。

重做日志包括两部分:

  1. 重做日志缓冲:这是内存中的一部分,所有的重做日志都会首先写到这个缓冲区。
  2. 重做日志文件:这是磁盘上的文件,通常称为 ib_logfile0, ib_logfile1 等。重做日志缓冲区的内容会在一定条件下被刷新到这些文件中。

重做日志的主要用途是在系统崩溃时恢复数据。如果系统崩溃,一些最近的更改可能还没有写入数据文件,但它们会在重做日志中。因此,在重启时,MySQL 可以使用重做日志来重放或“重做”这些更改,以确保数据的完整性。

此外,重做日志还可以提高系统的性能。因为所有的更改首先写入重做日志缓冲区,这样可以减少直接写入数据文件的次数,从而提高性能。