MySQL 的二进制日志(Binlog)清理周期并不是一个固定的时间间隔,而是基于日志文件的数量或大小。MySQL 提供了几种不同的方式来控制 Binlog 的清理:
- 基于文件数量:
- 使用
expire_logs_days
参数,你可以设置二进制日志文件保留的天数。一旦超过这个天数,旧的日志文件就会被删除。 - 例如,如果你想保留二进制日志文件 7 天,你可以在 MySQL 的配置文件中设置:
- 或者在 MySQL 命令行中设置:
- 基于文件大小:
- 使用
max_binlog_size
参数,你可以设置单个二进制日志文件的最大大小。当文件达到这个大小时,它会被自动归档,并生成一个新的文件。 - 例如,如果你想限制每个二进制日志文件的大小为 1GB,你可以在配置文件中设置:
- 或者在 MySQL 命令行中设置:
- 手动清理:
- 你也可以选择手动清理二进制日志文件。例如,你可以使用
PURGE BINARY LOGS
命令来清除特定的二进制日志文件。例如,要清除所有旧于某个时间点的日志文件,你可以执行:
- 或者清除除了当前正在写入的日志文件外的所有日志文件:
- 基于文件数量:
- 你还可以通过设置
max_binlog_files
参数来限制二进制日志文件的最大数量。一旦达到这个数量,最旧的日志文件将被自动删除。这个参数是在 MySQL 8.0 版本引入的。 - 例如,如果你想限制二进制日志文件总数不超过 100 个,你可以在配置文件中设置:
- 或者在 MySQL 命令行中设置:
注意事项
- 如果你设置了
expire_logs_days
,并且没有设置max_binlog_size
或者max_binlog_files
,MySQL 会根据设置的天数自动删除旧的二进制日志文件。 - 如果同时设置了
expire_logs_days
和max_binlog_size
,则这两个设置都会生效,但expire_logs_days
的优先级更高。 - 手动清理二进制日志文件时要谨慎,确保不会影响到正在进行的备份或复制操作。
示例
假设你想让二进制日志文件保留 7 天,并且每个文件的大小限制为 1GB,你可以在 MySQL 的配置文件中这样设置:
或者在 MySQL 命令行中动态设置:
请确保在做出任何更改之前备份现有的配置文件,并在更改后重启 MySQL 服务器以使设置生效。