MySQL 的二进制日志(Binlog)清理周期并不是一个固定的时间间隔,而是基于日志文件的数量或大小。MySQL 提供了几种不同的方式来控制 Binlog 的清理:

  1. 基于文件数量:
  • 使用 expire_logs_days 参数,你可以设置二进制日志文件保留的天数。一旦超过这个天数,旧的日志文件就会被删除。
  • 例如,如果你想保留二进制日志文件 7 天,你可以在 MySQL 的配置文件中设置:
[mysqld]
expire_logs_days=7
  • 1.
  • 2.
  • 或者在 MySQL 命令行中设置:
SET GLOBAL expire_logs_days=7;
  • 1.
  1. 基于文件大小:
  • 使用 max_binlog_size 参数,你可以设置单个二进制日志文件的最大大小。当文件达到这个大小时,它会被自动归档,并生成一个新的文件。
  • 例如,如果你想限制每个二进制日志文件的大小为 1GB,你可以在配置文件中设置:
[mysqld]
max_binlog_size=1G
  • 1.
  • 2.
  • 或者在 MySQL 命令行中设置:
SET GLOBAL max_binlog_size=1G;
  • 1.
  1. 手动清理:
  • 你也可以选择手动清理二进制日志文件。例如,你可以使用 PURGE BINARY LOGS 命令来清除特定的二进制日志文件。例如,要清除所有旧于某个时间点的日志文件,你可以执行:
PURGE BINARY LOGS BEFORE '2024-07-25 00:00:00';
  • 1.
  • 或者清除除了当前正在写入的日志文件外的所有日志文件:
PURGE BINARY LOGS TO 'mysql-bin.000002';
  • 1.
  1. 基于文件数量:
  • 你还可以通过设置 max_binlog_files 参数来限制二进制日志文件的最大数量。一旦达到这个数量,最旧的日志文件将被自动删除。这个参数是在 MySQL 8.0 版本引入的。
  • 例如,如果你想限制二进制日志文件总数不超过 100 个,你可以在配置文件中设置:
[mysqld]
max_binlog_files=100
  • 1.
  • 2.
  • 或者在 MySQL 命令行中设置:
SET GLOBAL max_binlog_files=100;
  • 1.
注意事项
  • 如果你设置了 expire_logs_days,并且没有设置 max_binlog_size 或者 max_binlog_files,MySQL 会根据设置的天数自动删除旧的二进制日志文件。
  • 如果同时设置了 expire_logs_daysmax_binlog_size,则这两个设置都会生效,但 expire_logs_days 的优先级更高。
  • 手动清理二进制日志文件时要谨慎,确保不会影响到正在进行的备份或复制操作。
示例

假设你想让二进制日志文件保留 7 天,并且每个文件的大小限制为 1GB,你可以在 MySQL 的配置文件中这样设置:

[mysqld]
expire_logs_days=7
max_binlog_size=1G
  • 1.
  • 2.
  • 3.

或者在 MySQL 命令行中动态设置:

SET GLOBAL expire_logs_days=7;
SET GLOBAL max_binlog_size=1G;
  • 1.
  • 2.

请确保在做出任何更改之前备份现有的配置文件,并在更改后重启 MySQL 服务器以使设置生效。