【原创】MySQL blackhole 存储引擎简记

14.7. The BLACKHOLE Storage Engine

The BLACKHOLE storage engine acts as a “black hole” that accepts data but throws it away and does not store it. Retrievals always return an empty result:
和其 blackhole 名字的含义一样,该存储引擎会将所有接收到的数据”吞没“,在本地不会保存所接收到的数据。所以当然也无法从对应的表中回去到相应的结果集。

?


1

2

3

4

5

6

7

8

9

mysql> CREATE TABLE test(i INT, c CHAR(10)) ENGINE = BLACKHOLE;

Query OK, 0 rows affected (0.03 sec)

 

mysql> INSERT INTO test VALUES(1,'record one'),(2,'record two');

Query OK, 2 rows affected (0.00 sec)

Records: 2  Duplicates: 0  Warnings: 0

 

mysql> SELECT * FROM test;

Empty set (0.00 sec)

To enable the BLACKHOLE storage engine if you build MySQL from source, invoke CMake with the -DWITH_BLACKHOLE_STORAGE_ENGINE option.
编译阶段使能 BLACKHOLE 存储引擎。

To examine the source for the BLACKHOLE engine, look in the sql directory of a MySQL source distribution.
源文件查看。

When you create a BLACKHOLE table, the server creates a table format file in the database directory. The file begins with the table name and has an .frm extension. There are no other files associated with the table.
创建 BLACKHOLE 表会产生相应的表格式文件:.frm。并且仅会产生该文件。

The BLACKHOLE storage engine supports all kinds of indexes. That is, you can include index declarations in the table definition.
BLACKHOLE 存储引擎吃吃各种类型索引。

You can check whether the BLACKHOLE storage engine is available with the SHOW ENGINES statement.
通过mysql命令行查看是否可以使用 BLACKHOLE 存储引擎创建表。

Inserts into a BLACKHOLE table do not store any data, but if statement based binary logging is enabled, the SQL statements are logged and replicated to slave servers. This can be useful as a repeater or filter mechanism.
向 BLACKHOLE 表中 insert 数据时,实际不会存储到表中,但在使能了基于语句的 binlog 时,会记录下 SQL 语句,并可用于 slave 复制。这也就是 BLACKHOLE 会被用作复制结构中 中继器 或 过滤机制 的原因。

Note

When using the row based format for the binary log, updates and deletes are skipped, and neither logged nor applied. For this reason, you should use STATEMENT for the binary logging format, and not ROW or MIXED.
注意:在使用基于行的 binlog 时,update 和 delete 会被忽略,既不会被记录到log中也不会被真正执行。基于这个原因,应该使用基于语句的 binlog 而不是基于行或者混合模式的 binlog 。

Suppose that your application requires slave-side filtering rules, but transferring all binary log data to the slave first results in too much traffic. In such a case, it is possible to set up on the master host a “dummy” slave process whose default storage engine is BLACKHOLE, depicted as follows:
在考虑 slave 侧需要过滤功能的应用场景时,如果将完整 binlog 传输到 slave 的代价是非常大的,则可以在 master 服务器上建立一个 使用 BLACKEHOLE 存储引擎的 ”dummy“ slave 进程,如下图:

The master writes to its binary log. The “dummy” mysqld process acts as a slave, applying the desired combination of replicate-do-* and replicate-ignore-* rules, and writes a new, filtered binary log of its own. (See Section 16.1.4, “Replication and Binary Logging Options and Variables”.) This filtered log is provided to the slave.
master 会写自己的 binlog 文件,而”dummy“ mysqld 进程扮演了 slave 的角色,根据配置的 replicate-do-* 和 replicate-ignore-* 规则,记录被自身过滤后的 binlog 日志。而这个 binlog 日志就可以作为其他真正 slave 进行复制的源。

The dummy process does not actually store any data, so there is little processing overhead incurred by running the additional mysqld process on the replication master host. This type of setup can be repeated with additional replication slaves.
由于 dummy 进程实际上没有存储任何数据,所以几乎不会为 master 主机带来额外开销。

INSERT triggers for BLACKHOLE tables work as expected. However, because the BLACKHOLE table does not actually store any data, UPDATE and DELETE triggers are not activated: The FOR EACH ROW clause in the trigger definition does not apply because there are no rows.

Other possible uses for the BLACKHOLE storage engine include:

  • Verification of dump file syntax.
  • Measurement of the overhead from binary logging, by comparing performance using BLACKHOLE with and without binary logging enabled.
  • BLACKHOLE is essentially a “no-op” storage engine, so it could be used for finding performance bottlenecks not related to the storage engine itself.

BLACKHOLE 的其他可能用途:

  • 校验转储文件语法。
  • 测量开启 binlog 日志所带来的额外开销。
  • 查找和存储引擎无关的其他方面的性能瓶颈。

The BLACKHOLE engine is transaction-aware, in the sense that committed transactions are written to the binary log and rolled-back transactions are not. 

时间: 2025-01-19 20:02:41

【原创】MySQL blackhole 存储引擎简记的相关文章

mysql cluster存储引擎NDB,如何设置哪些数据不被LOAD到内存中?

问题描述 mysql cluster存储引擎NDB,如何设置哪些数据不被LOAD到内存中? mysql cluster存储引擎NDB,如何设置哪些数据不被LOAD到内存中?

MySQL数据库存储引擎和分支现状

在MySQL经历了2008年Sun的收购和2009年Oracle收购Sun的过程中,基本处于停滞发展的情况,在可以预见的未来,MySQL是肯定会被Oracle搁置并且逐步雪藏消灭掉的.MySQL随着相应的各主创和内部开发人员的离去,缔造了各个不同的引擎和分支,让MySQL有希望继续发扬光大起来. 本文大致讲解一下MySQL目前除了主要的 MyISAM.InnoDB.Heap(Memory).NDB 等引擎之外的其他引擎的发展和现状,以及MySQL主干以外的分支的状况,为了我们未来更好的使用MyS

mysql 的存储引擎介绍

在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库.而在设计表的时候,我们都会关注一个问题,使用什么存储引擎.等一下,存储引擎?什么是存储引擎? 什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能. 例如,如果你在研究大量的临时数据,你也许需要使用内存MySQL

MySQL数据库存储引擎和分支现状分析_Mysql

MySQL随着相应的各主创和内部开发人员的离去,缔造了各个不同的引擎和分支,让MySQL有希望继续发扬光大起来.  在MySQL经历了2008年Sun的收购和2009年Oracle收购Sun的过程中,基本处于停滞发展的情况,在可以预见的未来,MySQL是肯定会被Oracle搁置并且逐步雪藏消灭掉的.MySQL随着相应的各主创和内部开发人员的离去,缔造了各个不同的引擎和分支,让MySQL有希望继续发扬光大起来. 本文大致讲解一下MySQL目前除了主要的 MyISAM.InnoDB.Heap(Mem

MySQL各存储引擎的区别及其启动方法

存储引擎是什么? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能. 例如,如果你在研究大量的临时数据,你也许需要使用内存存储引擎.内存存储引擎能够在内存中存储所有的表格数据.又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力). 这些不同的技术以及配套的相关功能在MySQL中被称作

详细介绍Mysql各种存储引擎的特性以及如何选择存储引擎

最近业务上有要求,要实现类似oracle 的dblink         linux版本 Server version: 5.6.28-0ubuntu0.14.04.1 (Ubuntu) 修改配置文件 /etc/mysql/my.cnf windows 版本  Server version: 5.6.21-log MySQL Community Server (GPL) 修改配置文件my.ini     接着将其开启,在 [mysqld] 下添加一行:   federated 重启Mysql,完

MySQL的存储引擎对比

在上一篇关于<MySQL体系架构>的文章里提到MySQL最大的特色是其可插拔的插件式存储引擎,这篇文章将对比几个主流的存储引擎.这里要特别提一点,由于MySQL是开源的,所以如果你对某些存储引擎不满意,可以修改或写一个存储引擎,增加自己想要的特性,这也是MySQL作为开源数据库的优势之一. 下表显示了各种存储引擎的特性: 其中最常见的两种存储引擎是MyISAM和InnoDB 刚接触MySQL的时候可能会有些惊讶,竟然有不支持事务的存储引擎,学过关系型数据库理论的人都知道,事务是关系型数据库的核

简介MySQL InnoDB存储引擎的一些参数

InnoDB做为MySQL目前最广泛的事务存储引擎,很多地方的设计和Oracle都是共通的.对于Oracle DBA 来说,学习的时候可以多和Oracle的一些特性进行类比,当然也要明白二者之间的区别. innodb_additional_mem_pool_size 用于缓存InnoDB数据字典及其他内部结构的内存池大小,类似于Oracle的library cache.这不是一个 强制参数,可以被突破. innodb_buffer_pool_size 内存缓冲池大小,用于缓存表和索引数据等.类似

浅谈MySql的存储引擎(表类型) (转)

什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其实是数据库管理系统,它们可以存储数据,并提供查询和更新数据库中的数据的功能等等.根据数据库如何存储数据和如何操作数据的实现机制不同,这些数据库之间即有区别又有共同点. MySql数据库是开放源代码的关系型数据库.目前,它可以提供的功能有:支持sql语言.子查询.存储过程.触发器.视图.索引.事务.锁.外