mysql中BLACKHOOL的作用

* {
margin: 0;
padding: 0;
}
.forFlow {
margin: 0 16px 0 266px;
}
#mainContent {
float: right;
margin-left: -250px;
width: 100%;
}
body {
font-family: Helvetica,Verdana,Arial,sans-serif;
}
body {
color: #333;
background: #fff;
font-family: Verdana,Arial,Helvetica,sans-serif;
font-size: 10pt;
line-height: 1.8;
}
#cnblogs_post_body {
margin-bottom: 20px;
}
#cnblogs_post_body {
word-break: break-word;
}
#MySignature {
display: none;
}
.clear {
clear: both;
}
#blog_post_info_block {
margin-top: 20px;
}
#BlogPostCategory {
margin-bottom: 10px;
}
#post_next_prev {
line-height: 1.8;
font-size: 12px;
}
a {
text-decoration: none;
color: #333;
}
.postCon a, .postBody a, .feedbackCon a {
border-bottom: 1px dotted #333;
color: #000;
}
#post_next_prev a.p_n_p_prefix:link {
text-decoration: none;
}
#green_channel {
padding: 10px 0;
margin-bottom: 10px;
margin-top: 10px;
border: #c0c0c0 1px dashed;
font-size: 12px;
width: 350px;
text-align: center;
}
#author_profile {
float: left;
width: 280px;
margin-top: 0px;
margin-bottom: 10px;
color: #000;
margin-left: 0px;
font-size: 12px;
}
#div_digg {
float: right;
margin-bottom: 10px;
margin-right: 30px;
font-size: 12px;
width: 125px;
text-align: center;
margin-top: 10px;
}
.diggit {
float: left;
width: 46px;
height: 52px;
background: url(‘//static.cnblogs.com/images/upup.gif‘) no-repeat;
text-align: center;
cursor: pointer;
margin-top: 2px;
padding-top: 5px;
}
.buryit {
float: right;
margin-left: 20px;
width: 46px;
height: 52px;
background: url(‘//static.cnblogs.com/images/downdown.gif‘) no-repeat;
text-align: center;
cursor: pointer;
margin-top: 2px;
padding-top: 5px;
}
.diggword {
margin-top: 5px;
margin-left: 0px;
font-size: 12px;
color: #808080;
}
.burynum {
font-size: 14px;
color: #075db3;
font-family: Verdana;
}
#div_digg .burynum {
line-height: 1.5em !important;
}
.diggnum {
font-size: 14px;
color: #075db3;
font-family: Verdana;
}
#div_digg .diggnum {
line-height: 1.5em !important;
}
.author_profile_info {
float: left;
line-height: 18px;
}
img {
border: 0;
}
img {
border: 0;
}
.author_avatar {
vertical-align: top;
float: left;
margin-right: 5px;
padding-top: 5px;
padding-left: 2px;
border: 0;
}
#green_channel a {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAYAAABIdFAMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUeNo8zjsOxCAMBFB/KEAUFFR0Cbng3nQPw68ArZdAlOZppPFIBhH5EAB8b+Tlt9MYQ6i1BuqFaq1CKSVcxZ2Acs6406KUgpt5/LCKuVgz5BDCSb13ZO99ZOdcZGvt4mJjzMVKqcha68iIePB86GAiOv8CDADlIUQBs7MD3wAAAABJRU5ErkJggg%3D%3D) repeat-x;
display: inline-block;
padding: 3px 8px;
color: #fff;
text-decoration: none;
font-weight: bold;
cursor: pointer;
margin-right: 10px;
-moz-border-radius: 5px;
-webkit-border-radius: 10px;
-moz-box-shadow: 0 1px 3px rgba(0,0,0,.5);
-webkit-box-shadow: 0 1px 3px rgba(0,0,0,.5);
text-shadow: 0px -1px 1px rgba(0,0,0,0.25);
vertical-align: middle;
}
#green_channel a:link, #green_channel a:visited, #green_channel a:active {
color: #fff !important;
border: none !important;
}
#green_channel #green_channel_digg {
background-color: #2daebf;
}
#green_channel #green_channel_follow {
background-color: #e33100;
}
#green_channel #green_channel_favorite {
background-color: #ffb515;
}
#green_channel #green_channel_weibo, #green_channel #green_channel_wechat {
background: none;
padding: 3px 2px;
-moz-border-radius: none;
-webkit-border-radius: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
text-shadow: none;
}
#green_channel #green_channel_wechat img {
width: 24px;
height: 24px;
border: medium none;
box-shadow: none;
margin-left: 5px;
vertical-align: middle;
}
#green_channel #green_channel_weibo img {
vertical-align: middle;
border: none;
margin-left: 5px;
box-shadow: none;
}
p {
margin-top: 0px;
margin-bottom: 0px;
}
.postBody p {
margin-top: 12px;
}
#cnblogs_post_body p {
margin: 10px auto;
text-indent: 0px;
}
.cnblogs_code {
background-color: #f5f5f5;
font-family: Courier New !important;
font-size: 12px !important;
border: 1px solid #ccc;
padding: 5px;
overflow: auto;
margin: 5px 0;
color: #000;
}
#cnblogs_post_body ul {
margin-left: 30px;
padding-left: 0px;
}
li {
list-style: none;
}
#cnblogs_post_body ul li {
list-style-type: disc;
}
#cnblogs_post_body img {
max-width: 900px;
height: auto;
}
pre {
margin-top: 0px;
margin-bottom: 0px;
}
pre {
white-space: pre-wrap;
white-space: -moz-pre-wrap !important;
white-space: -pre-wrap;
white-space: -o-pre-wrap;
word-wrap: break-word;
}
.cnblogs_code pre {
font-family: Courier New !important;
font-size: 12px !important;
word-wrap: break-word;
white-space: pre-wrap;
}
.cnblogs_code span {
font-family: Courier New !important;
font-size: 12px !important;
line-height: 1.5 !important;
}

MySQL在5.x系列提供了Blackhole引擎–“黑洞”. 其作用正如其名字一样:任何写入到此引擎的数据均会被丢弃掉, 不做实际存储;Select语句的内容永远是空。 和Linux中的 /dev/null 文件完成的作用完全一致。
那么, 一个不能存储数据的引擎有什么用呢?
在大规模的Mysql服务器集群中,如果是存在一台主服务,多台从服务器,在繁忙的业务中,意味着主服务器每操作一个事件,都要往自己的二进制日志中写数据,同时还要往多台从服务器发一次,N台服务器指向一台主服务器,那么需要主服务器发送N次,会启动N个线程,每个线程各自从线程里读二进制日志,那么会有大量的IO,本来是为主服务器减轻负担的,那么这样只能造成压力越来越大,那这样master主机就会为每台slave主机分配出一个binlog dump进程,这样的话会严重影响master的性能。

解决这种问题可以采用多级复制,主服务器还是保持主位置A,再拿一台服务器作为从服务器B,主服务器A只启动一个线程指向从服务器B,那么B服务器再作为其他N台服务器的主,那么B就启动了多个线程,怎么给B服务器减轻压力呢?

在主从之间添加一个分布式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表结构文件。

BLACKHOLE总结

  • BLACKHOLE支持所有类型的索引
  • BLACKHOLE 表不存储数据,如果复制基于SBR,语句可以记录并在从库执行;如果复制为RBR、MBR,UPDATE及DELETE操作将会跳过,不会记录也从库不执行。
  • Insert触发器可以正常使用,Update、Delete触发器因为不存储数据不能触发,FOR EACH ROW 也不能触发。
  • BLACKHOLE 表Auto Increment字段不会自动递增,也不保留自增字段的状态
  • 结合复制replicate-do和replicate-ignore规则,可使用BLACKHOLE当做一个分发主服务器
  • 可用来验证转储文件语法
  • 测试binlog的开销量,通过对比 BLACKHOLE 与 不启动 binlog的性能
  • 可能被用来查找与存储引擎自身不相关的性能瓶颈

原文地址:https://www.cnblogs.com/caiwenjun/p/12035920.html

时间: 2024-11-13 08:07:34

mysql中BLACKHOOL的作用的相关文章

MySql中delimiter的作用是什么?

MySql中delimiter的作用是什么? 这个命令与存储过程没什么关系吧.其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了.默认情况下,delimiter是分号;.在命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令.如输入下面的语句mysql> select * from test_table;然后回车,那么MySQL将立即执行该语句. 但有时候,不希望MySQL这么做.在为可能输入较多的语句,且语句中包含有分号.如试图在命令行客户

mysql中character_set_connection的作用

character_set_client = x character_set_results = xcharacter_set_connection = x; 我们常用在mysql操作类中使用这三面,下面大概说下作用: character_set_client 客户端使用的编码,如GBK, UTF8 比如你写的sql语句是什么编码的. character_set_results 查询返回的结果集的编码(从数据库读取的数据是什么编码的). character_set_connection 连接使用

mysql中EXPLAIN 的作用

(一)id列: (1).id 相同执行顺序由上到下 mysql> explain -> SELECT*FROM tb_order tb1 -> LEFT JOIN tb_product tb2 ON tb1.tb_product_id = tb2.id -> LEFT JOIN tb_user tb3 ON tb1.tb_user_id = tb3.id; +----+-------------+-------+--------+---------------+---------+

MySQL数据库中delimiter的作用概述

以下的文章主要是向大家描述的是MySQL数据库中delimiter的作用是什么?我们一般都认为这个命令和存储过程关系不大,到底是不是这样的呢?以下的文章将会给你相关的知识,望你会有所收获. 其实就是告诉MySQL解释器,该段命令是否已经结束了,MySQL数据库是否可以执行了.默认情况下,delimiter是分号;.在命令行客户端中,如果有一行命令以分号结束,那么回车后,MySQL将会执行该命令.如输入下面的语句 MySQL> select * from test_table; 然后回车,那么My

MySQL中的外键是什么、有什么作用

最近自学数据库MySQL,然后有个疑问,一直不得其解,查询了相关资料,最后还是没有解决. 我的疑问是 "使用外键约束" ,然后我对 "外键" 这个词不是很理解,查询相关资料都是讲一些术语,说外键的主要作用是:保持数据的一致性.完整性.听得我是一头雾水. 关于外键,我有自己的一些理解,但是不晓得是否正确,举个例子来表达我的看法:假如现在需要建立一个表,一个什么样的表呢?一个班级的学生个人信息表: 所以在设计的时候,就给表1添加一个外键,这个外键就是表2中的学号字段,那

【个人笔记】《知了堂》MySQL中的数据类型

MySQL中的数据类型 1.整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节  范围(-128~127) smallint(m) 2个字节  范围(-32768~32767) mediumint(m) 3个字节  范围(-8388608~8388607) int(m) 4个字节  范围(-2147483648~2147483647) bigint(m) 8个字节  范围(+-9.22*10的18次方) 取值范围如果加了unsigned,则最大值翻倍,如tinyint un

在Mysql中如何显示所有用户?

在Mysql中如何显示所有用户? 这是一个mysql初学者经常问到的一个问题,今天我们就带大家看看是如何在Mysql中显示所有用户的.通常我们在mysql中使用SHOW DATABASES可以显示所有的数据库,SHOW TABLES将会显示所有的数据表,那么你是不是会猜测显示所有用户的命令是SHOW USERS呢?不不不,并不是的,现在让我们一起来看看如何显示所有用户吧. 在Mysql中显示所有用户 1.登录数据库 首先,你需要使用如下命令登录到数据库,注意,必须是root用户哦~ ## mys

mysql中的事务

一.事务的作用 事务是指一系列将要发生的连续的操作. 事务安全是为了保证一系列操作的结果保持同步,保证数据的完整性. 开启事务后,操作的结果会先保存到事务日志中,等操作完成提交事务后,才会修改表中的数据. 注意:只有innodb存储引擎和bdb存储引擎才支持事务安全. 二.事务使用 start transaction; -- 开启事务 -- SQL语句1... savepoint sp1; -- 设置回滚点 -- SQL语句2... -- 如果操作失败 可以用rollback退回到回滚点 rol

mysql中的索引、触发器、和事务

一.索引 1.什么是索引 如果把表看做一本书,索引就好像书里的目录或者书签,能帮助你快速找到你要检索的内容,所以叫做索引. 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如 果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合 要求的记录.表里面的记录数量越多,这个操作的代价就越高.如果作为搜索条件的列上已 经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置.如果表有1000个 记录,通过索引查找记录至少要比