首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql bin日志到期,以不填满磁盘空间。

mysql bin日志到期,以不填满磁盘空间。
EN

Database Administration用户
提问于 2023-04-25 09:59:12
回答 2查看 70关注 0票数 2

我正在使用5.7.37-日志MySQL社区服务器。我的mysqld.cnf如下所示:

代码语言:javascript
复制
server_id = 11
log_bin = bin.log
log-bin-index = bin-log.index
binlog_format = row
max_binlog_size = 100M
socket = mysql.sock
expire_logs_days = 1

我对expire_logs_days =1的期望是,1天后日志将被清除。我也看不见旧的原木。但是,当我在一周后检查日志时,我仍然可以看到bin.0001,而当前的日志名是bin.000006。当我重新启动mysql服务器并创建一个新日志时,我观察到旧日志正在被清除。

但是我不想重新启动服务器来删除我的旧文件。它们应该自动删除。当我积累旧日志时,我担心会填满磁盘空间(我不一定需要它们),我也不想为此目的重新启动sql server。

我也看到了一些形式的建议运行PURGE BINARY LOGS BEFORE NOW() - INTERVAL 1 DAY;,但当我们已经设置配置时,我不理解手动运行上述语句的意义。

如果我的理解和期望是否正确,请帮助我。以及如何测试或确保日志被自动删除?也不会对磁盘空间造成伤害。

附加生成的bin日志的屏幕截图。

这是24小时后的截图(一天)

EN

回答 2

Database Administration用户

回答已采纳

发布于 2023-04-25 18:29:43

关于binlog过期,您必须记住的一件棘手的事情是,在MySQL服务器打开一个新的binlog文件之前不会发生这种情况。因此,只要它目前正在写入bin.000006,最老的文件就不会过期。当它转到bin.000007时,MySQL服务器会检查哪些(如果有的话)旧的绑定日志文件需要过期。

因此,从理论上讲,如果您对bin.000006的写入速度足够慢,则需要很多天才能填充并转到bin.000007,这样您的旧的二进制日志文件就会停留很多天。

您不需要重新启动MySQL服务器就可以强制它打开一个新的二进制日志,您也不必等到binlog文件填充到它的最大大小。您可以随时运行FLUSH LOGS;。这将关闭打开的日志文件,包括二进制日志,并再次打开它们。对于二进制日志,即使最后一个文件尚未满,它也会打开一个新文件。

也有可能一天之内就会出现大量的写操作,因此许多新的binlog文件被快速打开和填充,但是最老的binlog文件仍然小于1天的历史,所以它还没有过期。因此,在过期旧文件之前,仍然可以填充磁盘空间。

MySQL缺少的是基于绑定日志总空间的过期,而不是基于时间的过期。

Percona是MySQL的一个分支。在版本8.0中,他们引入了一个选项binlog_space_limit,它为binlog使用的总存储设置了一个绝对上限。请参见:

票数 3
EN

Database Administration用户

发布于 2023-04-25 15:21:18

以下是您必须认识到的关于二进制日志过期的一些信息

回到2017年7月13日,我回答了MySQL仍然清除二进制日志并忽略过期._日志_天数。我已经提到了MySQL 5.0.x如何在午夜之前删除二进制日志。

从那时起,过期_日志_天数对秒级粒度的操作为5.7。

现在,MySQL 8.0有了更多的变量来微调二进制日志清除

然而,还有一些事情你必须意识到

  • binlog.00006具有时间戳Apr 25 09:12
  • binlog.00003具有时间戳Apr 24 16:08

那为什么binlog.00003还没消失?

Apr 25 09:12 (binlog.00006时间戳)前24小时是Apr 24 09:12。如果Apr 24 09:12的UNIX时间戳嵌入到binlog.00003中,那么该绑定日志必须保持不变。

一旦binlog.00006到达Apr 25 16:08的UNIX时间戳,那么当mysqld下一次从binlog.00006旋转到binlog.00007或在Apr 25 16:09手动执行FLUSH BINARY LOGS;时,binlog.00003就会消失。

如果您想在binlog.00003中看到UNIX时间戳,只需运行

代码语言:javascript
复制
mysqlbinlog binlog.00003 > binlog_events.txt
vi -R binlog_events.txt

并查看时间戳( UNIX时间戳值和人类可读的时间戳)

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/326383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档