我可以将 MySQL 二进制日志放在慢速磁盘上吗?

the*_*uts 6 mysql mysql-replication capacity-planning

我们的主服务器上只有 450 GB 的 nvme 空间,并且二进制日志使用了大量空间,即使它们只保留了两天。

将 MySQL 二进制日志写入较慢的磁盘(如远程目录)是否会降低 MySQL 的性能?

HBr*_*ijn 7

二进制日志记录在语句或事务完成后立即完成,但在释放任何锁或完成任何提交之前,所以我将日志放在较慢的磁盘上可能会产生影响,因为其他事务将延迟到当前事务被记录为止.

我会把你的二进制日志保存在你最快的存储上,但通过只保留那些仍然需要复制的日志来减少闪存驱动器上的日志数量。

您可以自动化并更频繁地运行手册中概述的清除日志的过程,并删除所有不再需要的日志,因为从站已经处理了它们。

  1. 在每个从服务器上,用于SHOW SLAVE STATUS检查它正在读取哪个日志文件。

  2. 获取主服务器上二进制日志文件的列表SHOW BINARY LOGS

  3. 确定所有从机中最早的日志文件。这是目标文件。如果所有从站都是最新的,则这是列表中的最后一个日志文件。

  4. 备份您将要删除的所有日志文件。(此步骤是可选的,但始终是可取的。)

  5. 清除所有日志文件,但不包括目标文件。

如果您想保留更多日志,例如出于审计目的,请在步骤 4 中将这些日志复制到较慢的(旋转)磁盘,然后使用PURGE BINARY LOGS TOPURGE BINARY LOGS BEFOREMySQL 语句将它们从闪存驱动器中删除。


sho*_*hok 5

MySQL 手册:

默认情况下,二进制日志在每次写入时同步到磁盘 ( sync_binlog=1)。如果未启用 sync_binlog,并且操作系统或机器(不仅是 MySQL 服务器)崩溃,则二进制日志的最后一条语句可能会丢失。为了防止这种情况,启用 sync_binlog 系统变量以在每 N 个提交组后将二进制日志同步到磁盘。请参阅第 5.1.8 节,“服务器系统变量”。sync_binlog 的最安全值是 1(默认值),但这也是最慢的。

上述引用的粗体部分意味着缓慢的存储将对您的 INSERT 速率设置上限。作为部分缓解,binlog 是按顺序写入的,因此您无需为查找延迟付费。

使用单个 7200 RPM 磁盘作为专用 binlog 设备的示例:平均旋转延迟为约 4.1 毫秒,您可以预期每秒约 250 次写入 I/O。这显然假设磁盘端没有 NVRAM/写回缓存:如果存在这样的缓存,那么同步写入会立即被它吸收。

另请注意,您可以禁用 binlog 的同步,基本上将问题从延迟限制问题转变为吞吐量限制问题。但一定要了解它对数据一致性意味着什么。