我最近读到有关 Percona Server 中的一个设置,称为max_binlog_files
限制 binlog 文件的总数。这正是我所需要的。我binlog_expire_logs_seconds
目前设置为 3 天,99% 的情况下效果都很好。然而,我目前正在进行的项目运行大量查询,并且二进制日志在短短几个小时内就消耗了超过 70GB。在这种情况下,我确实需要限制文件数量。
MySQL 是否有任何本机设置可以实现此目的?限制二进制日志消耗的总磁盘空间的最佳方法是什么?
我最近读到有关 Percona Server 中的一个设置,称为max_binlog_files
限制 binlog 文件的总数。这正是我所需要的。我binlog_expire_logs_seconds
目前设置为 3 天,99% 的情况下效果都很好。然而,我目前正在进行的项目运行大量查询,并且二进制日志在短短几个小时内就消耗了超过 70GB。在这种情况下,我确实需要限制文件数量。
MySQL 是否有任何本机设置可以实现此目的?限制二进制日志消耗的总磁盘空间的最佳方法是什么?
不,上游 MySQL 实现没有相当于
max_binlog_files
. 因此,您无法真正阻止二进制日志增长的短期激增。好吧,该选项
log_bin=OFF
肯定会阻止无限的二进制日志增长,但这是现有 MySQL 服务器提供的唯一解决方案。您可以在 MySQL 之外实现一个计划作业(例如 cron 作业)来定期检查
SHOW BINARY LOGS
它们是否使用了比您想要的更多的空间,然后PURGE BINARY LOGS
减少空间。风险在于,如果您使用这些功能,激进的清除可能会删除复制、时间点恢复或 CDC 工具仍需要的一些日志。
在我上一份工作中,我们偶尔会让给定 MySQL 上的二进制日志增长到 500GB。开发人员没有意识到进行大量数据加载的影响,他们会在任何需要的时候这样做,而不会通知 DBA 团队。我们使用的是 Percona Server,所以我们设置了一个
max_binlog_files=500
,这样他们就不会使用超过500GB,但我们不能随意采取更多限制。最终,我们只需确保每个数据库服务器上有足够的可用存储空间来应对此类激增。
鉴于 @BillKarwin 的有用回答,我选择让 cron 以 15 分钟的间隔运行一个简单的 bash 脚本。我不太擅长 bash 所以可能有一种更简洁的方法,但现在这似乎可以完成工作: