【MySQL】设置二进制日志文件自动过期,从根源上解决占满磁盘的问题:通过修改 binlog_expire_logs_seconds 配置项

引言

MySQL的二进制日志(binlog)文件记录了数据库中所有更改的详细信息,包括但不限于对数据的插入、删除、更新,对表和数据库的创建、更改、删除等操作。每一次这样的操作都会在二进制日志中生成一个新的日志事件,并被写入到一个新的二进制日志文件中。因此,如果数据库的活动量较大,二进制日志文件将会迅速增长,可能占用大量的磁盘空间。

此外,MySQL的二进制日志是持久化存储的,除非手动删除或者设置了自动过期(通过expire_logs_days配置项),否则这些日志文件将会永久保留在磁盘上。如果没有定期清理旧的二进制日志文件,这些文件将会累积起来,占用更多的磁盘空间。因此,为了避免磁盘空间被耗尽,需要定期清理旧的二进制日志文件,或者设置二进制日志的自动过期。

在 MySQL 8 及更高版本中,引入了binlog_expire_logs_seconds全局系统变量,它允许您以秒为单位设置二进制日志文件的自动过期时间。这比expire_logs_days变量提供了更精细的控制,后者只能以天为单位设置过期时间。


步骤

  1. 登录到MySQL服务器:
bash 复制代码
mysql -u root -p
  1. 查看当前的binlog_expire_logs_seconds值:
sql 复制代码
SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';
  1. 设置binlog_expire_logs_seconds值。例如,如果要将二进制日志文件的过期时间设置为1天(86400秒),可以执行以下命令:
sql 复制代码
SET GLOBAL binlog_expire_logs_seconds = 86400;

这个命令只会影响新生成的二进制日志文件,已经存在的二进制日志文件的过期时间不会改变。

注意,只有具有SUPER权限的用户才能设置binlog_expire_logs_seconds系统变量。

  1. 为了让这个设置在MySQL服务器重启后仍然有效,需要将它添加到MySQL的配置文件中。

打开MySQL的配置文件

bash 复制代码
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]部分添加以下行:

bash 复制代码
binlog_expire_logs_seconds = 86400

然后保存并关闭配置文件。

  1. 重启MySQL服务器以使新的设置生效
bash 复制代码
sudo service mysql restart
  1. 再次查看当前的binlog_expire_logs_seconds值以确保设置生效
sql 复制代码
SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';

现在,MySQL服务器会自动删除超过1天的二进制日志文件。

相关推荐
韩立学长4 小时前
【开题答辩实录分享】以《自助游网站的设计与实现》为例进行选题答辩实录分享
java·mysql·spring
SAP小崔说事儿4 小时前
在数据库中将字符串拆分成表单(SQL和HANA版本)
java·数据库·sql·sap·hana·字符串拆分·无锡sap
川贝枇杷膏cbppg5 小时前
asmcmd
数据库·oracle
JIngJaneIL5 小时前
基于java+ vue助农电商系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
q_19132846955 小时前
基于Springboot+MySQL+RuoYi的会议室预约管理系统
java·vue.js·spring boot·后端·mysql·若依·计算机毕业设计
IndulgeCui5 小时前
基于CentOS7 DM8单机部署配置记录-20251216
数据库
surtr15 小时前
关系代数与关系型数据库
数据库·sql·数据库系统
学海_无涯_苦作舟6 小时前
MySQL面试题
数据库·mysql·面试
老邓计算机毕设6 小时前
SSM校内二手书籍交易系统的设计与实现an1k0(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·ssm 框架开发·ssm 校内二手书籍交易系统
天行健,君子而铎7 小时前
高性能、可控、多架构:教育行业数据库风险监测一体化解决方案
数据库·架构