MySQL'的目的是什么;什么是黑洞引擎?

MySQL'的目的是什么;什么是黑洞引擎?,mysql,blackhole,Mysql,Blackhole,为什么要保存以后无法检索的内容?要点是什么?在复制环境中,所有SQL语句都在所有节点上运行,但您只希望某些节点实际存储结果,这一点很有用。这是文档中给出的一个用例: 文件中给出的其他用途包括: 验证转储文件语法 间接费用的计量 通过比较BLACKHOLE与和的性能 没有启用二进制日志记录 黑洞本质上是一个“无操作” 存储引擎,因此它可以用于查找性能 与存储引擎本身无关的瓶颈 假设您有两台计算机,每台计算机运行一台MySQL服务器。一台计算机承载主数据库,第二台计算机承载用作备份的 另外,假设

为什么要保存以后无法检索的内容?要点是什么?

在复制环境中,所有SQL语句都在所有节点上运行,但您只希望某些节点实际存储结果,这一点很有用。这是文档中给出的一个用例:

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

  • 验证转储文件语法
  • 间接费用的计量 通过比较BLACKHOLE与和的性能 没有启用二进制日志记录
  • 黑洞本质上是一个“无操作” 存储引擎,因此它可以用于查找性能 与存储引擎本身无关的瓶颈

假设您有两台计算机,每台计算机运行一台MySQL服务器。一台计算机承载主数据库,第二台计算机承载用作备份的

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

但是,由于复制筛选器只在从属服务器上应用,因此在主服务器上执行的所有语句的binlog仍然需要通过网络传输。这里的带宽被浪费了;主服务器正在发送事务的binlog,而从服务器在接收到这些事务后将直接丢弃这些事务。我们能做得更好,避免不必要的带宽使用吗

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

此设置是本段落和图表中描述和说明的内容(更简洁):

假设您的应用程序需要从端筛选规则,但首先将所有二进制日志数据传输到从端会导致过多的流量。在这种情况下,可以在主主机上设置默认存储引擎为BLACKHOLE的“虚拟”从属进程,如下所示:

除了过滤之外,这些文档还隐晦地暗示,使用启用binlogging的BLACKHOLE服务器“可以用作转发器……机制”。这个用例在文档中的内容较少,但是可以想象一个场景,在这个场景中这是有意义的。例如,假设您有许多从属服务器,它们都位于本地网络上的计算机上,彼此之间具有快速的本地连接,所有这些服务器都需要从只能通过internet连接的远程从属服务器复制大量数据。您不想让它们都直接从主控箱复制,因为这样您就可以多次获得相同的数据,并使用比您必须使用的带宽多几倍的internet带宽。但假设您也不想让现有的从机中的一个从机从主机复制,而让其他从机复制,这可能是因为您的从机运行在比主机可靠得多的机器上,或者正在运行一些其他进程,这些进程可能会吃掉机箱的所有CPU或内存,从而杀死机箱,而且,您不想冒中间从机出现软件或硬件故障的风险,从而导致整个从机网络瘫痪。你是做什么的

一个可能的折衷方案是在从属网络中引入一个额外的盒子,作为中介,优化可靠性和性能,而不是存储。给它一个小型、可靠的SSD驱动器,除了从远程主机复制的
mysqld
进程外,不在上面运行任何东西,并让它生成其他从机可以订阅的binlog。当然,将这个中间从机设置为使用黑洞引擎,这样它就不需要存储空间

文档中详细描述的这个和中间过滤从属都是边缘情况;大多数MySQL用户将永远不会发现自己会从使用这两种策略中获益,更不用说获得足够的好处来证明自己的工作是正确的。但至少在理论上,黑洞引擎可以用来在复制从机网络中创建一个中间节点,作为带宽节约策略,而不需要该节点将数据实际存储在磁盘上