相关文件10bet官方网站 下载本手册 从本手册中摘录

16.6黑洞存储引擎

黑洞存储引擎充当黑洞接受数据,但将其抛出并不存储它。检索总是返回一个空结果:

MySQL>创建表测试(i int,c char(10))引擎=黑孔;查询OK,影响0行(0.03秒)MySQL>插入到测试值(1,'记录一个'),(2,'记录二');查询确定,2行受影响(0.00秒)记录:2重复项:0警告:0 MySQL> Select * from Test;空集(0.00秒)

启用黑洞存储引擎如果从源代码构建MySQL,请调用CMake.与之-dwith_blackhole_storage_engine.选项。

检查来源黑洞发动机,看看SQL.MySQL源分发的目录。

当你创建一个黑洞表,服务器在全局数据字典中创建表定义。没有与表关联的文件。

黑洞存储引擎支持各种索引。也就是说,您可以在表定义中包含索引声明。

MySQL 8.0.27的最大键长度为3072字节。在8.0.27之前,最大键长度为1000字节。

黑洞存储引擎不支持分区。

你可以检查是否黑洞存储引擎可用展示引擎陈述。

插入A.黑洞表不存储任何数据,但如果启用了基于语句的二进制日志记录,则会记录SQL语句并复制到副本服务器。这可以用作中继器或过滤机制。

假设您的应用程序需要副本侧过滤规则,但将所有二进制日志数据传输到副本,首先导致运输过多。在这种情况下,可以在复制源服务器A上设置默认存储引擎的副本过程黑洞,如下所示:

图16.1使用BlackHole进行过滤的复制

Replication Source Server使用源MySQLD进程和虚拟MySQLD进程。在副本中,MySQLD进程从虚拟MySQLD进程复制。

源将写入其二进制日志。这mysqld.过程充当复制品,应用所需的组合replicate-do- *replicate-Ignore- *规则,并写入新的,过滤的二进制日志。(看第17.1.6节“复制和二进制记录选项和变量”。)将此过滤的日志提供给副本。

虚拟过程实际上并不存储任何数据,因此通过运行额外的处理截止点几乎没有处理开销mysqld.在Replication Source Server上的进程。可以使用附加副本重复此类设置。

触发器黑洞表格按预期工作。但是,因为黑洞表实际上并不存储任何数据,更新删除触发器未激活:对于每一行触发定义中的子句不适用,因为没有行。

其他可能的用途黑洞存储引擎包括:

  • 验证转储文件语法。

  • 通过使用比较使用性能来测量二进制记录的开销黑洞启用和没有二进制记录。

  • 黑洞基本上是A.无op.存储引擎,因此它可用于查找与存储引擎本身无关的性能瓶颈。

黑洞引擎是事务感知的,在提交的事务被写入二进制日志和回滚事务的意义上不是。

黑洞引擎和自动增量列

黑洞发动机是NO-OP发动机。在表中执行的任何操作黑洞没有效果。在考虑自动增量的主要键列的行为时,应考虑到这一点。引擎不会自动增量字段值,并且不会保留自动增量字段状态。这在复制方面具有重要意义。

考虑以下复制方案,其中所有三个条件适用:

  1. 在源服务器上有一个带有自动增量字段的黑洞表,即主键。

  2. 在复制品上,存在相同的表格,但使用MyISAM引擎。

  3. 在源表中执行插入,而不明确地设置自动增量值声明本身或通过使用a设置插入_id.陈述。

在此方案中,复制失败在主键列上具有重复的条目错误。

在基于语句的复制中,值insert_id.在上下文中,事件总是相同的。因此,复制导致由于尝试使用重复值为主键列插入行而失败。

在基于行的复制中,引擎返回行的值对于每个插入件始终相同。这导致副本尝试使用相同的主键列的值重放两个插入日志条目,因此复制失败。

列过滤

使用基于行的复制时(binlog_format =行),支持表中缺少最后一列的副本,如本节所述第17.5.1.9节“源和副本的不同表定义”

此过滤在副本侧面工作,即,在过滤外,列将复制到副本。至少有两种情况下,不希望将列复制到副本:

  1. 如果数据是机密的,则副本服务器不应该访问它。

  2. 如果源具有许多副本,则在发送到副本之前过滤可能会降低网络流量。

可以使用源列过滤黑洞引擎。这是通过类似于如何实现源表滤波的方式进行的黑洞发动机和这一点- 重新填充do-table或者- 一次性忽略表选项。

源的设置是:

创建表T1(public_col_1,...,public_col_n,secret_col_1,...,secret_col_m)引擎= myisam;

可信副本的设置是:

创建表T1(public_col_1,...,public_col_n)引擎= blackhole;

不受信任的副本的设置是:

创建表T1(public_col_1,...,public_col_n)引擎= myisam;