MySQL binlog 日志保留策略:保存时间与文件大小限制
一、设置 binlog 日志保存时间和文件大小限制
在 MySQL 中,常见日志包括二进制日志(binlog)、错误日志和查询日志等。这些日志对数据库管理、复制和故障恢复都很重要。本文重点记录 binlog 日志的保留策略。
不同 MySQL 版本的默认保留策略并不完全相同。以 MySQL 8.0 为例,binlog_expire_logs_seconds 默认值为 2592000,也就是 30 天。为了避免版本差异带来的误解,生产环境建议显式配置保留时间和单个 binlog 文件大小。
MySQL 8.0 及以上版本建议使用 binlog_expire_logs_seconds,不要再使用已经弃用的 expire_logs_days。例如保留 7 天:
1 | [mysqld] |
以上配置会让 MySQL 自动清理超过 7 天的 binlog,并把单个 binlog 文件大小限制在约 100MB。达到 max_binlog_size 后,MySQL 会在合适的时机切换到新的 binlog 文件。
更改设置后,需要重新启动MySQL服务才能使其生效。
注意事项:
max_binlog_size不能小于 4096 字节。expire_logs_days在 MySQL 8.0 中已经弃用,MySQL 8.2.0 起已移除;新配置应使用binlog_expire_logs_seconds。log_bin_trust_function_creators与 binlog 过期清理无关,它主要影响存储函数创建时的安全检查,不建议混在日志保留策略中配置。
可以通过下面的命令查看当前配置:
1 | SHOW VARIABLES LIKE 'binlog_expire_logs_seconds'; |
二、如何手动清理 binlog
1. 使用 MySQL 命令行
在 MySQL 命令行中,使用 PURGE BINARY LOGS 语句可以删除指定时间或指定文件之前的 binlog。
例如,为了删除超过7天的binlog日志文件,可以运行以下命令:
1 | PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY); |
2. 按照 binlog 名称删除
1 | -- 将 mysql-bin.000011 之前的日志清理掉 |
3. 按照时间删除
1 | -- 删除 2023-03-21 18:08:00 之前的 binlog 日志 |
手动清理前应先确认复制链路是否已经消费相关 binlog,避免主从复制或数据恢复受影响。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Clang's Blog!
评论







