在mysql8.0发现一个bug,设置binlog_expire_logs_seconds后不生效,binlog无法自动清理。
在mysql 8.0中,下面参数控制过期binlog自动清理。
#开启自动清理
binlog_expire_logs_auto_purge = ON #默认开启
binlog_expire_logs_seconds = 432000 #单位秒
#禁用自动清理
binlog_expire_logs_auto_purge = OFF # 优先级高于 binlog_expire_logs_seconds
bug描述
在生产环境中(mysql 8.0.35),遇到binlog_expire_logs_auto_purge参数不生效问题。以下是生产库中binlog_expire_logs_seconds设置的值,、换算后为5天。
root@localhost: 15:24: [(none)]> show variables like 'binlog_expire_%';
+-------------------------------+--------+
| Variable_name | Value |
+-------------------------------+--------+
| binlog_expire_logs_auto_purge | ON |
| binlog_expire_logs_seconds | 432000 |
+-------------------------------+--------+
2 rows in set (0.01 sec)
root@localhost: 15:54: [(none)]> select 432000/60/60/24;
+-----------------+
| 432000/60/60/24 |
+-----------------+
| 5.000000000000 |
+-----------------+
1 row in set (0.00 sec)
但是生产库中binlog超过5天的日志并未清理,如下截图。

查看binlog截断时间,每天晚上的binlog切换时间几乎一致。这个时间恰好与备份完成时间一致,所以日志切换是备份触发的。

下面是2025.1.8的备份完成时间,与上面binlog切换时间吻合。

对比别人提交的bug,问题描述基本一致。可见,当max_binlog_size设置较大,而每天生产的binlog日志量较小时,就无法进行自然切换。然而备份切换的时候由于加锁了,不让删除binlog,所以导致binlog日志一直没有清理。

解决方法
改问题可能会引发磁盘空间耗尽的风险,建议合理调小max_binlog_size的值,规避掉这个bug。
# 设置max_binlog_size为200M,
root@localhost: 16:10: [(none)]> set global max_binlog_size= 200*1024*1024;
Query OK, 0 rows affected (0.00 sec)
# 持久化的配置文件
[mysqld]
max_binlog_size = 200M
#binlog过期清理参数立刻生效,过期日志已清理
[mysql@dmp-db-prod-a1 binlog]$ ll
total 3010020
-rw-r----- 1 mysql mysql 545399638 Jan 4 00:08 mysql-bin.000385
-rw-r----- 1 mysql mysql 542010267 Jan 5 00:09 mysql-bin.000386
-rw-r----- 1 mysql mysql 536332259 Jan 6 00:08 mysql-bin.000387
-rw-r----- 1 mysql mysql 544761690 Jan 7 00:09 mysql-bin.000388
-rw-r----- 1 mysql mysql 547686672 Jan 8 00:09 mysql-bin.000389
-rw-r----- 1 mysql mysql 365910530 Jan 8 16:11 mysql-bin.000390
-rw-r----- 1 mysql mysql 75275 Jan 8 16:11 mysql-bin.000391
-rw-r----- 1 mysql mysql 252 Jan 8 16:11 mysql-bin.index
最后修改时间:2025-01-08 16:53:49
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




