MySQL黑洞引擎的用途是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (34)

你为什么要保存一些你以后无法取回的东西?有什么意义?

提问于
用户回答回答于

在复制环境中,所有SQL语句都在所有节点上运行,但您只需要一些节点实际存储结果,这是非常有用的。其他用途包括:

  • 转储文件语法的验证。
  • 通过比较启用了二进制日志和不启用二进制日志的黑洞的性能来测量二进制日志记录的开销。
  • 黑洞本质上是一个“无操作”的存储引擎,因此它可以用来查找与存储引擎本身无关的性能瓶颈。
用户回答回答于

假设您有两台计算机,每台计算机都运行一个MySQL服务器。一台计算机承载主数据库,第二台计算机承载一个复制附件作为后援。

此外,假设主服务器包含一些不想备份的数据库或表。也许它们是高度搅动的缓存表,如果丢失了它们的内容,这并不重要。因此,为了节省磁盘空间和避免不必要地使用CPU、内存和磁盘IO,可以使用复制选项若要将从服务器配置为忽略影响不希望备份的表的语句,请执行以下操作。

但是由于复制筛选器只被应用在从服务器上的二进制日志在主服务器上执行的语句仍然需要通过网络传输。这里浪费了带宽;主服务器正在为事务发送绑定日志,从服务器在接收到这些日志时就会丢弃这些事务。我们能做得更好,避免不必要的带宽使用吗?

是的,我们可以,这就是黑洞引擎出现的原因。在同一台计算机主服务器正在运行,我们运行第二个,虚拟的。mysqld进程,这个文件承载一个黑洞数据库。我们将这个虚拟进程配置为从主进程的binlog复制,使用与实际从服务器相同的复制选项,并生成自己的binlog。虚拟进程的binlog现在只包含真正的从属程序需要的语句,除了过滤掉来自binlog的不想要的语句(因为它使用的是黑洞引擎)之外,它还没有做任何实际的工作。最后,我们将真正的从属程序配置为从虚拟进程的binlog复制,而不是从原始主进程的binlog复制。我们现在已经消除了托管主从服务器的两台计算机之间不必要的网络通信量。

假设应用程序需要从端过滤规则,但是将所有二进制日志数据首先传输到从端会导致过多的通信量。在这种情况下,可以在主主机上设置一个“虚拟”从进程,其默认存储引擎是黑洞,如下所示:

扫码关注云+社区