likes
comments
collection
share

如何优雅的删除MYSQL的binlog

作者站长头像
站长
· 阅读数 50

如何优雅的删除MYSQL的binlog

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

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

1、查看日志文件

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

  • 命令1
 show master logs;
  • 命令2
 show binary logs;

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

如何优雅的删除MYSQL的binlog

2、删除binlog

2.1、手动方式删除

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

  • 方式1:删除指定文件之前的日志,但不包括指定的日志
purge binary logs to 'mysql-bin.000068';

如何优雅的删除MYSQL的binlog

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

如何优雅的删除MYSQL的binlog

如何优雅的删除MYSQL的binlog

  • 方式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';

如何优雅的删除MYSQL的binlog

  • 可以通过以下命令设置 expire_logs_days 参数的值:
SET GLOBAL expire_logs_days = 30;

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

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

  • 设置之后不会立即清除,触发条件是:
  1. binlog大小超过max_binlog_size
  2. 手动执行flush logs
  3. 重新启动时(MySQL将会new一个新文件用于记录binlog)

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

flush logs;

如何优雅的删除MYSQL的binlog

2.2.2、Mysql8.0版本

  • 查看binlog的过期相关的全局变量
show variables like '%expire%';

如何优雅的删除MYSQL的binlog

  • 参数说明

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.
#
转载自:https://juejin.cn/post/7234924083842220092
评论
请登录