首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在MySQL 8中默认打开了二进制日志,并且它们会被自动删除?

为什么在MySQL 8中默认打开了二进制日志,并且它们会被自动删除?
EN

Server Fault用户
提问于 2021-11-19 13:21:54
回答 2查看 2.4K关注 0票数 3

我们最近发现,在MySQL 8默认配置中,Ubuntu20.04机器上的binlog.*文件在/var/lib/mysql中杂乱无章。

也就是说,我们每天有一个4.2GB的数据库大小和大约500 MB的二进制日志。

因此,我们的磁盘空间不足。

当然,我们可以禁用和删除二进制日志,但是我们想知道这种默认配置的原因是什么,以及它们是否都将被删除(而且我们只需要增加机器上的存储空间)。

我们认为它们不应该永远保存在默认配置中,因为这样就需要inifite存储。

EN

回答 2

Server Fault用户

发布于 2021-11-22 14:10:10

Intro

这实际上是上游的变化。有些发行版可能会更改设置,但很可能大多数只会沿袭上游。

代码库托管在https://github.com/mysql/mysql-server (二进制日志默认设置的实际文件,是sql/sys_vars.cc )上。

通过对错误的深入研究,我最终确定了更改默认值的提交:https://github.com/mysql/mysql-server/commit/9fa9504e5aaf68661aef2d735cecbd3c58eb7790

它提到mysql的一个工作日志项:#10470。你可以在这里查看:https://dev.mysql.com/worklog/

该工作日志项的基本原理部分提供了以下内容:

基本原理

几乎所有的生产安装都启用了二进制日志,因为它用于复制和实时恢复。

基于以下原因,在默认情况下,我们应该启用它:

  1. 我们为用户消除了一个配置步骤。1A.以后启用它需要重新启动mysqld。
  2. 我们得到了更多类似于生产的内部测试服务器。
  3. 我们可以更好地了解和面对二进制日志的性能影响。

Expiration

在MySQL8.0中,日志文件的默认过期是30 days,由变量binlog_expire_logs_seconds管理,该变量默认为2592000 seconds。要真正进行清除,必须对日志进行冲洗。根据文档,当一个二进制日志文件关闭并启动一个新日志文件时,日志刷新会自动发生。单个文件的最大大小可以由最大1GB的max_binlog_size控制。但是,有一个警告,即事务不是在日志文件之间分割的,理论上它们可能高达4GB。您还可以自己每天发布flush logspurge binary logs语句。

票数 5
EN

Server Fault用户

发布于 2021-11-19 20:22:03

配置binlog_expire_logs_seconds86400会说每天清除日志。我想把它延长到一两周。

同时,检查max_binlog_size。如果您希望每天清除绑定日志,并且每天生成5MB,那么我建议将其设置为100 M。

清理一天和100米后,磁盘使用量将保持在500到600米之间(或者可能是500米到1100米,我不知道确切的算法)。

每天5亿美元似乎很多。是否经常更新大表中的每一行?还是别的什么?

A同意默认配置可能不是最佳配置。有几种默认情况需要考虑,并且安装不问您想要哪一种:

  • 复制(为此需要绑定日志)。“过期”可能是违约的。
  • 想要‘及时恢复’。同样,需要二进制日志,但是什么是好的缺省值?
  • 不需要二进制日志。
  • 其他的?
票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1084033

复制
相关文章

相似问题

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