MySQL中Binlog文件占用空间比较大该如何清理

 更新时间:2025年09月02日 09:23:07   作者:Gary强z  
在MySQL中binlog(二进制日志)是一种记录数据库操作的日志文件,它记录了数据库更改的所有操作,这篇文章主要介绍了MySQL中Binlog文件占用空间比较大该如何清理的相关资料,需要的朋友可以参考下

一、前言

在进行一次数据导入之后,发现服务器磁盘爆满,初步判断是数据库产生了大量binlog所致,接下来进行分析处理。

二、分析

1、查看磁盘空间

通过df -h命令,查看磁盘空间占用情况

2、查找占用文件或目录

通过命令:du -ah -d1,逐级排查分析,排查找到占用最大的文件或目录

3、找到binlog文件

找到这样一大堆binlog文件,显然正是罪魁祸首。

接下来考虑如何清理这些binlog文件。

三、处理

binlog日志可以通过参数expire_logs_days设置文件保留天数。

1、自动清理

1)设置过期时间

临时设置:

-- 查看binlog保留天数参数设置,0表示永不删除
SHOW VARIABLES LIKE 'expire_logs_days';

-- 临时修改(重启失效)
SET GLOBAL expire_logs_days = 7;

永久设置:修改配置文件/etc/my.cnf,重启mysql

[mysqld]
# 设置过期时间为7天
expire_logs_days = 7
# 限制单个文件大小
max_binlog_size = 1024M

2)触发清理机制

执行以下命令或重启数据库,触发清理机制

-- 刷新日志触发清理
FLUSH LOGS;  

3)执行结果

> 登录mysql,设置过期时间,并执行触发机制:

 因为是这两天执行产生的, 所以发现binlog并没有清除减少,所以接下来就要手动清理了。

2、手动清理

1)查看binlog状态

-- 查看binlog文件列表
SHOW BINARY LOGS; 
-- 查看主库正在使用的文件
SHOW MASTER STATUS; 
-- 查看从库读取位置(主从环境必备)
SHOW SLAVE STATUS\G;

2)删除文件

-- 删除指定文件之前的日志(不包含该文件)
PURGE BINARY LOGS TO 'mysql-bin.000510';

-- 删除指定时间前的日志
PURGE BINARY LOGS BEFORE '2025-06-20 00:00:00';

执行删除,查看binlog文件,磁盘空间释放成功。

四、注意事项

1、不要直接使用 rm 删除文件

(会导致主从中断)

2、不要删除正在使用的 binlog

(SHOW MASTER STATUS 显示的当前文件)

3、主从环境特别注意

1)确保清理的文件‌早于所有从库的读取位置

-- 在每个从库执行:
SHOW SLAVE STATUS\G  -- 观察 Relay_Master_Log_File 和 Exec_Master_Log_Pos

2)清理后立即检查主从同步状态

SHOW SLAVE STATUS\G  -- 验证 Slave_IO_Running 和 Slave_SQL_Running

4、生产环境操作前务必备份 binlog 索引文件

(/var/lib/mysql/binlog.index)异常时可重建索引:

mysqlbinlog --no-defaults binlog.* > binlog.index

总结 

到此这篇关于MySQL中Binlog文件占用空间比较大该如何清理的文章就介绍到这了,更多相关MySQL Binlog文件占空间大清理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql中几种插入效率的实例对比

    Mysql中几种插入效率的实例对比

    这篇文章通过实例跟大家介绍了Mysql中几种插入方法的效率对比,这其中包括逐条插入、基于事务的批量插入、单条语句一次插入多组数据以及导入数据文件等四种方法的对比,文中通过实例代码介绍很详细,需要的朋友们下来来一起看看吧。
    2017-04-04
  • MySQL最大连接数配置与调优实践

    MySQL最大连接数配置与调优实践

    这篇文章主要介绍了MySQL最大连接数配置与调优方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2026-03-03
  • MySQL回表查询与索引覆盖的区别

    MySQL回表查询与索引覆盖的区别

    本文主要介绍了MySQL回表查询与索引覆盖的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • MySQL 8.0.26版本升级32版本查询数据为空的解决方案

    MySQL 8.0.26版本升级32版本查询数据为空的解决方案

    这篇文章主要介绍了MySQL 8.0.26版本升级32版本查询数据为空的跟踪,本文给大家分享两种解决方法,结合实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2024-03-03
  • MySQL异常恢复之无主键情况下innodb数据恢复的方法

    MySQL异常恢复之无主键情况下innodb数据恢复的方法

    这篇文章主要介绍了MySQL异常恢复之无主键情况下innodb数据恢复的方法,结合实例形式分析了针对innodb引擎无主键的情况下恢复数据的步骤与相关技巧,需要的朋友可以参考下
    2016-04-04
  • 浅谈mysql的sql_mode可能会限制你的查询

    浅谈mysql的sql_mode可能会限制你的查询

    本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数group by的规则,下面就来介绍一下解决方法,感兴趣的可以了解一下
    2025-03-03
  • MySQL的联表查询实现

    MySQL的联表查询实现

    数据通常分布在多个表中,为了获取全面的信息,需要进行联表查询,本文主要介绍了MySQL的联表查询实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • Mysql主从同步Last_IO_Errno:1236错误解决方法

    Mysql主从同步Last_IO_Errno:1236错误解决方法

    最近遇到Mysql主从同步的Last_IO_Errno:1236错误问题,然后在网上查找相关解决方案,这里分享给大家,供参考。
    2017-10-10
  • 详解JDBC数据库链接及相关方法的封装

    详解JDBC数据库链接及相关方法的封装

    这篇文章主要介绍了详解JDBC数据库链接及相关方法的封装的相关资料,下面是封装的具体类,用到了泛型和反射,希望能帮助到大家,需要的朋友可以参考下
    2017-08-08
  • sql中替换函数replace()用法与实例总结

    sql中替换函数replace()用法与实例总结

    这篇文章主要给大家介绍了关于sql中替换函数replace()用法与实例的相关资料,在SQL中REPLACE函数用于替换一个字符串中的一部分为另一个字符串,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-02-02

最新评论