您为什么要保存以后无法检索的东西?重点是什么?

有帮助吗?

解决方案

它在所有SQL语句都在所有节点上运行的复制环境中很有用,但是您只希望一些节点实际存储结果。这是文档中给出的用例: http://dev.mysql.com/doc/refman/5.0/en/blackhole-storage-engine.html

文档中给出的其他用途包括:

  • 验证转储文件语法。
  • 通过使用Blackhole进行比较启用Blackhole,通过使用Blackhole进行比较启用了二进制记录的性能,从而测量了二进制记录的开销。
  • Blackhole本质上是一种“ No-Op”存储引擎,因此可以用于查找与存储引擎本身无关的性能瓶颈。

其他提示

假设您有两台计算机,每台运行MySQL Server。一台计算机托管主数据库,第二台计算机托管A 复制奴隶 您用作备份。

另外,您的主服务器包含一些您不想备份的数据库或表。也许它们是高链缓存表,如果您丢失了他们的内容,都没关系。因此,为了节省磁盘空间并避免不必要使用CPU,内存和磁盘io,您可以使用 复制选项 要配置从属来忽略影响您不希望备份的表的语句。

但是由于复制过滤器仅应用 在从服务器上, ,Binlogs 全部 在主服务器上执行的语句仍然需要通过网络传输。这里浪费了带宽。主服务器正在发送BINLOGS进行交易,从而在接收到这些交易时只会抛弃。我们可以做得更好,避免不必要的带宽使用情况吗?

是的,我们可以,那是黑洞发动机进来的地方。 同一计算机 主服务器正在运行,我们运行第二个虚拟 mysqld 处理,该托管黑洞数据库。我们配置了这个虚拟进程以从主过程的Binlog中复制,具有与真实从属相同的复制选项,并产生自己的Binlog。虚拟进程的Binlog现在仅包含真正的从属需要的陈述,除了滤除Binlog的不需要语句之外,它没有做任何实际工作(因为它使用了Blackhole Engine)。最后,我们配置了真正的从属从虚拟过程的Binlog复制,而不是从原始的Master Process的Binlog中复制。现在,我们已经消除了托管主服务器和从服务器的两台计算机之间的不必要的网络流量。

此设置是本段的描述和说明的(更简洁的)和图表 黑洞文档:

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

Diagram of the scenario described above

除了过滤外,这些文档还神秘地暗示,使用黑洞服务器启用了Binlogging “可以用作中继器……机制有用”. 。在文档中,这种用例少了,但是可以想象一种有意义的情况。例如,假设您有很多从服务器,所有这些服务器都在本地网络上的计算机上都具有快速的本地连接相互连接,所有这些都需要从远程从服务器中复制大量数据,这些数据只能通过Internet连接到。您不想让它们全部直接从主框中复制,从那以后,您几次获得了相同的数据,并且使用了比您所需的几次Internet带宽。但是假设你 不想只让您现有的奴隶之一从主人那里复制,而其他奴隶则复制了该奴隶,也许是因为您的奴隶在可靠的机器上运行得比主人少得多,或者正在运行其他可能杀死框的其他过程通过食用其所有CPU或内存,您不想冒险在中级奴隶上降低整个奴隶网络的软件或硬件故障。你做什么工作?

一种可能的折衷是,将一个额外的盒子引入您的从属网络以充当中介机构,以优化可靠性和性能,而不是存储。给它一个小的可靠的SSD驱动器 mysqld 从远程主体复制过程,并产生其他奴隶可以订阅的BINLOG。而且,当然,设置此中间从属以使用黑洞引擎,以便它不需要存储空间。

该文档中详细描述的这是边缘情况;大多数MySQL用户永远不会在使用这两种策略中受益的情况下发现自己,更不用说足以证明自己的工作来实际设置它们的合理性。但是至少从理论上讲,黑洞引擎可用于在复制奴隶网络中创建一个中间节点作为带宽保存策略,而无需该节点将数据实际存储在磁盘上。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top