我们最近发现,在 Ubuntu 20.04 机器上的 MySQL 8 默认配置中,binlog.*文件混乱/var/lib/mysql。
即我们有 4.2 GB 的数据库大小和每天大约 500 MB 的二进制日志。
因此,我们的磁盘空间不足。
当然,我们可以禁用和删除二进制日志,但我们想知道这种默认配置的原因是什么,以及它们是否都会被删除(我们只需要在我们的机器上增加一点存储空间)。
我们猜测它们不应该永远保留在默认配置中,因为那样就需要无限的存储空间。
这实际上是上游的变化。一些发行版可能会改变设置,但大多数发行版可能只会追随上游。
代码库托管在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/
该工作日志项的基本原理部分提供了以下内容:
几乎所有生产安装都启用了二进制日志,因为它用于复制和时间点恢复。
鉴于此,我们应该默认启用它,原因如下:
在 mysql 8.0 中,日志文件的默认过期时间是30 days,由变量控制binlog_expire_logs_seconds,默认为2592000 seconds。为了真正发生清除,必须刷新日志。根据文档,当一个二进制日志文件关闭并启动一个新的二进制日志文件时,日志刷新会自动发生。单个文件的最大大小可以控制为max_binlog_size最大 1GB。然而,需要注意的是,事务不会跨日志文件分割,理论上它们最多可达 4GB。您也可以自己每天发布一份flush logs或一份purge binary logs声明。
配置binlog_expire_logs_seconds。 86400会说每天清除日志。我喜欢将其延长至一两周。
同时,检查max_binlog_size. 如果您希望每天清除二进制日志,并且每天生成 5MB,那么我建议将其设置为 100M。
一天和 100M 后清除将使磁盘使用量保持在 500 到 600M 之间(或者可能是 500M 和 1100M,我不知道确切的算法)。
每天 500M 看起来很多。您是否经常更新大表中的每一行?或者是其他东西?
A 同意默认配置可能不是最好的。有几种默认情况需要考虑,安装时不会询问您想要哪一种: