MySQL在5.x系列提供了Blackhole引擎–“黑洞”. 其做用正如其名字同样:任何写入到此引擎的数据均会被丢弃掉, 不作实际存储;Select语句的内容永远是空。 和Linux中的 /dev/null 文件完成的做用彻底一致。
那么, 一个不能存储数据的引擎有什么用呢?
在大规模的Mysql服务器集群中,若是是存在一台主服务,多台从服务器,在繁忙的业务中,意味着主服务器每操做一个事件,都要往本身的二进制日志中写数据,同时还要往多台从服务器发一次,N台服务器指向一台主服务器,那么须要主服务器发送N次,会启动N个线程,每一个线程各自从线程里读二进制日志,那么会有大量的IO,原本是为主服务器减轻负担的,那么这样只能形成压力愈来愈大,那这样master主机就会为每台slave主机分配出一个binlog dump进程,这样的话会严重影响master的性能。mysql
解决这种问题能够采用多级复制,主服务器仍是保持主位置A,再拿一台服务器做为从服务器B,主服务器A只启动一个线程指向从服务器B,那么B服务器再做为其余N台服务器的主,那么B就启动了多个线程,怎么给B服务器减轻压力呢?sql
在主从之间添加一个分布式master,配置blackhole存储引擎,他起到一个中继的做用,他接收数据但丢其余而不是存储,只是会把master的二进制日志供下层的slave来读取。数据库
第一,让B服务器再也不执行查询操做;
第二,让B服务器再也不执行写操做;
第三,负责多线程为每一个从服务器提供数据,那么就不须要在B服务器存储数据了,可是须要提供二进制日志和中继日志,但B服务器又不须要数据库;服务器
把blackhole引擎,用作slave,配置一些过滤规则,好比复制某些表、不复制某些表。而后也做为一个master,带多个slave。这样的好 处是省了必定的网络带宽,若是没有blackhole作中间环节,那么就须要把第一个master的全部日志都传递到各个slave上去。通过 blackhole这一个slave兼master过滤后再传递给多个slave,减小了带宽占用。而使用blackhole引擎的缘由是它不占硬盘空 间,做为一个中转,只负责记日志、传日志。网络
如何设置呢?多线程
先查看一下当下mysql支持的引擎列表;分布式
没找到blackhole引擎,那么接下来安装。性能
mysql> INSTALL PLUGIN blackhole SONAME 'ha_blackhole.so';
要设置 default_storage_engine=blackhole 就能实现主从 使用不一致的存储引擎。测试
补充:若是使用blackhole引擎建立的表,在执行insert操做后,再查询,是没有数据的,由于建立的时候只有.frm表结构文件。spa
BLACKHOLE总结