认识MySQL的blackhole引擎是在学习MySQL的复制拓扑中遇到的。出现场景是:为了避免在分发主库上做具体实际的查询,可以将它的表修改为blackhole存储引擎。
1、什么是blackhole引擎
创建一个blackhole的表时,服务器server在数据库目录创建一个表定义文件。文件用表的名字开头,以.frm作为扩展名。没有其他文件关联到这个表。blackhole表不存储任何数据。但是如果MySQL 开启了二进制日至,则SQL语句会被记录到二进制日志中(并被复制到从服务器)。这样使用blackhole存储引擎的MySQL可以作为主从复制中的中断重复器或者在其上面添加过滤器。
2、如果设定一个的表的存储引擎为blackhole引擎
和其他引擎设置一样,在建表时设置即可。如下
create table test (
rows1 int ,
rows2 char(3)
)engine=blackhole;
优点:分发主库上使用blackhole表,可以支持更多的备库。虽然会在分发主库执行查询,但是其代价非常小,因为blackhole表中没有任何数据。
缺点:该表存在Bug, 例如在某些情况下会忘记将自增ID写入到二进制日志里面。所以要小心使用blackhole表。
4、实例分析:blackhole并未存储数据
建表:
create table test (
rows1 int ,
rows2 char(3)
)engine=blackhole;
insert into test values(4,'aaa'),(5,'bbb'),(6,'ccc')
插入结果:
affected rows : 3
select * from test;
查询结果:
No record