Documentation Home

14.6.6 重做日志

重做日志是一种基于磁盘的数据结构,在崩溃恢复期间使用它来纠正由不完整的事务写入的数据。在正常操作期间,重做日志对 SQL 语句或低级 API 调用产生的更改表数据的请求进行编码。在意外关闭之前未完成更新数据文件的修改将在初始化期间和接受连接之前自动重播。有关重做日志在崩溃恢复中的作用的信息,请参阅 第 14.18.2 节,“InnoDB 恢复”

默认情况下,重做日志在磁盘上由两个名为ib_logfile0和 的文件物理表示ib_logfile1。MySQL 以循环方式写入重做日志文件。重做日志中的数据根据​​受影响的记录进行编码;这些数据统称为重做。通过重做日志的数据通道由不断增加的LSN值表示。

与重做日志相关的信息和过程在本节的以下主题下进行了描述:

更改重做日志文件的数量或大小

InnoDB 要在 MySQL 5.6.7 或更早版本中更改重做日志文件 的数量或大小,请执行以下步骤:

  1. 如果innodb_fast_shutdown设置为2,则设置 innodb_fast_shutdown为1:

    mysql> SET GLOBAL innodb_fast_shutdown = 1;
  2. 确保 innodb_fast_shutdown不设置为2后,停止MySQL服务器,确保无错关闭(确保日志中没有未完成事务的信息)。

  3. 将旧的日志文件复制到一个安全的地方,以防在关机期间出现问题并且您需要它们来恢复表空间。

  4. 从日志文件目录中删除旧日志文件。

  5. 编辑my.cnf以更改日志文件配置。

  6. 再次启动 MySQL 服务器。mysqld看到InnoDB启动时不存在日志文件并创建新的。

当更改日志文件的数量或大小时, 该innodb_fast_shutdown 设置不再相关。InnoDB此外,您不再需要删除旧的日志文件,尽管您可能仍想将旧的日志文件复制到安全的地方作为备份。要更改日志文件的数量或大小 InnoDB,请执行以下步骤:

  1. 停止 MySQL 服务器并确保它在没有错误的情况下关闭。

  2. 编辑my.cnf以更改日志文件配置。要更改日志文件大小,请配置 innodb_log_file_size. 要增加日志文件的数量,请配置 innodb_log_files_in_group.

  3. 再次启动 MySQL 服务器。

如果InnoDB检测到 innodb_log_file_size重做日志文件大小不同,它会写入一个日志检查点,关闭并删除旧日志文件,以请求的大小创建新日志文件,然后打开新日志文件。