当前位置: 代码网 > it编程>数据库>Mysql > MYSQL如何优雅的删除二进制日志binlog

MYSQL如何优雅的删除二进制日志binlog

2025年05月07日 Mysql 我要评论
摘要mysql 的二进制日志(binlog)是用于记录所有修改数据库的操作的文件,包括增删改等操作。这些操作记录在二进制日志中,可以用于数据恢复、数据同步等操作。但是,随着时间的推移,二进制日志文件会

摘要

mysql 的二进制日志(binlog)是用于记录所有修改数据库的操作的文件,包括增删改等操作。这些操作记录在二进制日志中,可以用于数据恢复、数据同步等操作。但是,随着时间的推移,二进制日志文件会越来越多,占用大量磁盘空间。因此,需要定期清理二进制日志文件。

注意:mysql的binlog日志不可以简单粗暴的直接删除,否则后果不堪设想!!!

1、查看日志文件

通过命令查看binlog日志文件信息,通过数据库ui工具或者服务器mysql控制台执行都行。以下两个命令效果是一样的。

命令1

 show master logs;

命令2

 show binary logs;

如下是在navicat中的效果,第一列是日志名称,第二列是文件大小,mysql8.0中会多一列encrpted。

2、删除binlog

2.1、手动方式删除

注意此处的手动删除并不是rm -rf ,此种删除方式是指通过命令方式删除

方式1:删除指定文件之前的日志,但不包括指定的日志

purge binary logs to 'mysql-bin.000068';

删除后,我们可以看到mysql-bin.000067被删除了,mysql-bin.000068还在。

方式2:删除指定日期之前的日志

purge binary logs before '2021-08-22 18:00:00';

操作样例:略

2.2、自动清除

除了手动方式清除外,msyql也提供了自动清除方案,mysql不同版本方式也有些许不同,具体如下:

2.2.1、mysql 5.7

expire_logs_days 是 mysql 中用于控制二进制日志文件保留时间的参数。二进制日志是 mysql 中用于记录所有修改数据库的操作的文件,包括增删改等操作。这些操作记录在二进制日志中,可以用于数据恢复、数据同步等操作。

expire_logs_days 参数用于控制二进制日志文件的保留时间,如果一个二进制日志文件的创建时间早于 expire_logs_days 天,则这个文件会被自动删除。这个参数的默认值是 0,表示不自动删除二进制日志文件。expire_logs_days 参数的设置范围是 0 到 4294967295(2的32次方减1),单位是天。需要注意的是,如果将 expire_logs_days 参数设置为一个非常大的值,可能会导致磁盘空间不足。因此,在设置 expire_logs_days 参数时,需要根据实际情况进行调整,确保磁盘空间充足,并且能够满足数据恢复、数据同步等操作的需求。另外,需要注意的是,expire_logs_days 参数只控制二进制日志文件的保留时间,不会对已经写入的二进制日志文件进行删除。如果需要删除已经写入的二进制日志文件,可以使用 purge binary logs 命令。

可以通过以下命令查看当前 mysql 实例中的 expire_logs_days 参数值:

show variables like 'expire_logs_days';

可以通过以下命令设置 expire_logs_days 参数的值:

set global expire_logs_days = 30;

这个命令将 expire_logs_days 参数的值设置为 30,表示保留 30 天内的二进制日志文件,超过 30天的文件会被自动删除。

需要注意的是,如果设置了 expire_logs_days 参数,但是没有启用二进制日志,这个参数是没有作用的。

设置之后不会立即清除,触发条件是:

  • binlog大小超过max_binlog_size
  • 手动执行flush logs
  • 重新启动时(mysql将会new一个新文件用于记录binlog)

此处我们可以通过方式2进行触发

flush logs;

2.2.2、mysql8.0版本

1.查看binlog的过期相关的全局变量

show variables like '%expire%';

2.参数说明

8.0版本的过期时间全局变量有binlog_expire_logs_seconds 和binlog_expire_logs_auto_purge,单位是秒管理时间粒度更小更符合实际应用场景,同时还有expire_logs_days这个,但是准备弃用了,在未来版本中会被移除。参数说明如下

binlog_expire_logs_secondsbinlog_expire_logs_auto_purge 是 mysql 8.0 中用于控制二进制日志文件保留时间的参数。

binlog_expire_logs_seconds 参数用于控制二进制日志文件的保留时间,单位是秒。如果一个二进制日志文件的创建时间早于 binlog_expire_logs_seconds 秒,则这个文件会被自动删除。这个参数的默认值是 2592000 秒(30 天),表示保留 30 天内的二进制日志文件,超过 30 天的文件会被自动删除。

binlog_expire_logs_auto_purge 参数用于控制是否自动清除过期的二进制日志文件。如果将这个参数设置为 on,则 mysql 会自动清除过期的二进制日志文件。这个参数的默认值是 on。

可以通过以下命令查看当前 mysql 实例中的 binlog_expire_logs_secondsbinlog_expire_logs_auto_purge 参数值:

show variables like 'binlog_expire_logs_seconds';
show variables like 'binlog_expire_logs_auto_purge';

可以通过以下命令设置 binlog_expire_logs_secondsbinlog_expire_logs_auto_purge 参数的值:

set global binlog_expire_logs_seconds = 86400;
set global binlog_expire_logs_auto_purge = off;

这个命令将 binlog_expire_logs_seconds 参数的值设置为 86400 秒(1 天),表示保留 1 天内的二进制日志文件,超过 1 天的文件会被自动删除。将 binlog_expire_logs_auto_purge 参数的值设置为 off,表示不自动清除过期的二进制日志文件。

需要注意的是,二进制日志文件的清除策略需要根据实际情况进行调整,确保磁盘空间充足,并且能够满足数据恢复、数据同步等操作的需求。在清除二进制日志文件时,需要确保不会影响正在写入的二进制日志文件,并且需要备份好重要的二进制日志文件,以便进行数据恢复、数据同步等操作。

参数名
binlog_expire_logs_secondsbinlog可以以秒为单位进行清理,之前参数是按照expire_logs_days天为删除,有时因1天当中,可能会生成几百g的binlog日志,导致空间不够用,手动或脚本清理。现在不需要那麻烦。更贴合现状的解决方案
expire_logs_days准备弃用,在未来版本中会被移除
binlog_expire_logs_auto_purgebinlog用于控制日志自动清理机制,mysql 8.0.29开始,可以通过将binlog_expire_logs_auto_purge系统变量设置为off来禁用binlog的自动清除。这优先于binlog_expire_logs_seconds的任何设置

按照下面代码注释记录:expire_logs_days准备废弃,binlog_expire_logs_auto_purge 和binlog_expire_logs_seconds 需要配合使用。

    3  warning	1287	'@@expire_logs_days' is deprecated and will be removed 
    in a future release. please use binlog_expire_logs_seconds instead.
 
 
# assert: if binlog_expire_logs_auto_purge is set to on, then the server
#         must purge automatically binary log files according to the
#         binlog_expire_logs_seconds setting.
#
 
#
# assert: if binlog_expire_logs_auto_purge is set to on and both
#         binlog_expire_logs_seconds and expire_logs_days are set to 0,
#         then binary log files shall not be automatically purged.
#

到此这篇关于mysql如何优雅的删除二进制日志binlog的文章就介绍到这了,更多相关mysql删除二进制日志binlog内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com