首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能把MySQL绑定日志放在一个缓慢的磁盘上吗?

问我能把MySQL绑定日志放在一个缓慢的磁盘上吗?
EN

Server Fault用户
提问于 2018-11-23 10:34:46
回答 2查看 988关注 0票数 6

我们的主服务器上只有450 GB的nvme空间,而这些二进制日志正在使用大量的空间,即使它们只保存了两天。

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

EN

回答 2

Server Fault用户

发布于 2018-11-23 11:21:54

二进制日志记录是在语句或事务完成后立即执行的,但在释放任何锁或执行任何提交之前完成,因此我设想将日志放置在较慢的磁盘上可能会产生影响,因为其他事务将被延迟到当前事务被记录下来。

我会将您的二进制日志保存在您最快的存储空间中,但是只保留那些仍然需要复制的文件,从而减少闪存上的日志数量。

您可以像手册中所概述的那样自动化和更频繁地运行清除日志的过程,并删除所有不再需要的日志,因为奴隶已经处理了这些日志。

  1. 在每个从服务器上,使用SHOW SLAVE STATUS检查它正在读取的日志文件。
  2. 使用SHOW BINARY LOGS获取主服务器上二进制日志文件的列表。
  3. 确定所有奴隶中最早的日志文件。这是目标文件。如果所有的奴隶都是最新的,这是列表上的最后一个日志文件。
  4. 备份要删除的所有日志文件。(此步骤是可选的,但始终是可取的。)
  5. 清除所有日志文件,但不包括目标文件。

如果您希望保留更多日志(例如用于审计目的),请在使用PURGE BINARY LOGS TO或PURGE BINARY LOGS BEFORE MySQL语句从闪存驱动器中删除这些日志之前,先将这些日志复制到较慢(正在旋转的)磁盘中。

票数 7
EN

Server Fault用户

发布于 2018-11-23 14:39:08

来自MySQL手册:

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

以上引号中的粗体部分意味着缓慢的存储将对插入速率设置上限。由于部分缓解是按顺序编写的,所以您不需要支付查找延迟的费用。

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

还请注意,您可以禁用binlog的同步,基本上将问题从延迟绑定问题转化为吞吐量限制问题。但是,一定要理解数据一致性的含义。

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

https://serverfault.com/questions/941323

复制
相关文章

相似问题

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