MYSQL中的BlackHole引擎

MYSQL中的BlackHole引擎

http://blog.csdn.net/ylspirit/article/details/7234021

http://blog.chinaunix.net/uid-22646981-id-3271711.html

MySQL在5.x系列提供了Blackhole引擎–“黑洞”.  其作用正如其名字一样:任何写入到此引擎的数据均会被丢弃掉, 不做实际存储;Select语句的内容永远是空。 和Linux中的 /dev/null 文件完成的作用完全一致。

那么, 一个不能存储数据的引擎有什么用呢?

Blackhole虽然不存储数据,但是MySQL还是会正常的记录下Binlog,而且这些Binlog还会被正常的同步到Slave上,可以在Slave上对数据进行后续的处理。 这样对于在Master上只需要Binlog而不需要数据的场合下,balckhole就有用了。

BlackHole 还可以用在以下场景

  1. 验证dump file语法的正确性
  2. 以使用blackhole引擎来检测binlog功能所需要的额外负载
  3. 由于blackhole性能损耗极小,可以用来检测除了存储引擎这个功能点之外的其他MySQL功能点的性能。

Mysql复制架构

 

 

013646duj mysql基于BLACKHOLE复制基础的各种架构

这是mysql主从复制最基本的原理图,左边是主master,右边是从slave,从图中可以清晰看到mysql的复制进程,master产生二进制日志binlog,输出到binlog文件,然后slave主机请求日志文件,master主机发送二进制到slave主机,二进制到slave后,写入中继日志,realylog,然后slave主机调用sql进程读取中继日志内容,写入到数据库,从而维持服务器的数据同步。

 

0136468IX mysql基于BLACKHOLE复制基础的各种架构

和上面不同的是,这个架构是一个三级架构,三台mysql服务器组成一个链式复制架构

,从左至右的master–slave–slave,前面两个,即master–slave和第一个图一样,没什么可说的,唯一的小变化是中间的slave主机也开启了二进制日志,他把从master上更新到的信息写入自身的logbin中,这样的目的可以从图中看到,为后面的slave主机提供二进制日志,此时这台slave主机其实充当了master主机的作用。

 

013646W30 mysql基于BLACKHOLE复制基础的各种架构

这个图中说明了mysql二进制日志的过滤,除非你想同步所有的数据库(包括mysql数据库,这会造成不必要的麻烦),二进制的日志过滤主要取决于master主机的设置binlog_do_db和binlog_ignore_db,他们决定了什么数据会记录到二进制日志中,并传送到slave主机,而slave主机也可以通过配置一些选项决定怎么利用这些数据,如replicate_do_db,replicate_do_table等

 

013647fsI mysql基于BLACKHOLE复制基础的各种架构

这个是一主多从的复制架构,实际应用也很多,可以用master来充当更新服务器,其他的几台slave充当只读服务器,在一定程度上分担了数据库流 量,一定确保只在master上更新数据。

0136478UC mysql基于BLACKHOLE复制基础的各种架构

这个一个主主复制的架构,两台master互为主从,更新和读取操作可以同时在两台上进行

013647vm5 mysql基于BLACKHOLE复制基础的各种架构

这是一个反例,这种复制是不被允许的,一台slave不可能同时接受两台master的数据,不过我们可以考虑其他的办法来实现,比如后面的blackhole数据存储引擎就可以实现。

013647uEI mysql基于BLACKHOLE复制基础的各种架构

这个则是在主主复制架构上的一个扩展,每台master下面还有一层slave结构

013647Iql mysql基于BLACKHOLE复制基础的各种架构

这个其实也是主主复制结构的扩展(我的个人理解)只是master的结构组成了一个环状结构

01364719I mysql基于BLACKHOLE复制基础的各种架构

这个也就容易理解,在环状结构的基础上又延伸出slave层。

013647TKo mysql基于BLACKHOLE复制基础的各种架构

这个图不太好理解,因为中间涉及到一个blackhole(黑洞)存储引擎,blackhole其实就相当于 linux系统中的/dev/null

013648wK3 mysql基于BLACKHOLE复制基础的各种架构

主 要意思就是一主N从的结构,这里这个N可能会有很多,几十台,百台,那这样master主机就会为每台slave主机分配出一个binlog dump进程,这样的话会严重影响master的性能,这样可以考虑在主从之间添加一个分布式master,配置blackhole存储引擎,他起到一个 中继的作用,他接收数据但丢其他而不是存储,只是会把master的二进制日志供下层的slave来读取。

 

这里摘录一段别人的解释:

 

把blackhole引擎,用做slave,配置一些过滤规则,比如复制某些表、不复制某些表。然后也作为一个master,带多个slave。这样的好 处是省了一定的网络带宽,如果没有blackhole做中间环节,那么就需要把第一个master的所有日志都传递到各个slave上去。经过 blackhole这一个slave兼master过滤后再传递给多个slave,减少了带宽占用。而使用blackhole引擎的原因是它不占硬盘空 间,作为一个中转,只负责记日志、传日志。

 

BLACKHOLE 存储引擎就像 “ 黑洞 ” 一样,它接收数据但丢弃它而不是存储它。查询总是返回空集。

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

Query OK, 0 rows affected (0.01 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)

虽然 BLACKHOLE 表不存储任何数据,但是如果开启二进制日志 ( Binary Log ),SQL 语句将被写入 日志,反之 SQL 语句会 被过滤掉。

BLACKHOLE 表的其他用途:

*  通 过对比开启和关闭二进制日志 ( Binary Log ) 时 BLACKHOLE 的性能,来计算二进制日志记录的开销。
*  BLACKHOLE 本质上是一个 “ no-op ” 存储引擎,它可能被用来查找与存储引擎自身不相关的性能瓶颈

下面这两张图也是跟blackhole存储相关,等慢慢研究blackhole后再细细研究

013648KWu mysql基于BLACKHOLE复制基础的各种架构

013648Ijj mysql基于BLACKHOLE复制基础的各种架构

最后这种情况大致的意思,有三台mysql server,1,2和3,3做为复制从服务器,想同时复制1上的DB1和2上的DB2,这样可以在2上引进一个blackhole的DB1来解决问题.

 

来源:http://blog.csdn.net/zhaohang1983/archive/2009/08/11/4432634.aspx

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461236.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql备份到带库_RMAN备份恢复——备份到带库的性能

简单测试了一下rac环境通过RMAN备份到带库的功能。数据库:Oracle 10203 RAC for Solaris8带库:Quantum PX502备份软件:Veritas netbackup 6.0由于带库是502,因此包含两个控制器。也就是说,应该可以通过两个控制性并行写…

《DIY四轴飞行器》读书笔记1

内容整理于黄和悦的《DIY四轴飞行器》。 一、四轴飞行器概述 1、四轴飞行器的现状 (1)研究内容 多级协作,自主飞行倾斜;最优控制理论,飞行器自主飞行和避障;主要是飞控部分。 (2&#xff09…

脚本输出当前 “yyyy-MM-dd WeakDay Festval”

ylbtech-JavaScript: 脚本输出当前 “yyyy-MM-dd WeakDay Festval”脚本输出当前 “yyyy-MM-dd WeakDay Festval” 1.A,源代码(Source Code)-脚本输出当前 “yyyy-MM-dd WeakDay Festval”返回顶部 <SCRIPT languagejavascript> <!--calendar new Date();day cal…

SecureCRT密钥远程登录Linux

一&#xff1a;环境SecureCRT版本&#xff1a;SecureCRT_5.1.3linux版本&#xff1a;[rootangelT ~]# cat /etc/redhat-release CentOS release 6.4 (Final)[rootangelT ~]# uname -r2.6.32-358.el6.x86_64linux系统的sshd_config配置文件是默认的&#xff0c;没有任何的修改。…

源码安装mysql数据库_Linux下源码安装mysql数据库

1、 创建mysql安装目录&#xff1a;[rootlocalhost ~]#mkdir –pv /usr/local/mysql/2、 创建数据存放目录&#xff1a;[rootlocalhost ~]#mkdir –pv /data/mysql/3、 创建用户和用户组&#xff0c;并赋予数据存放目录权限&#xff1a;[rootlocalhost ~]#groupadd mysql[ro…

win10禁止数字签名

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 1、点击通知&#xff0c;找到并进入“所有设置”。 2、在所有设置中找到并进入“更新和安全”。 3、找到恢复&#xff0c;点击“高级启动”下的“立即重启”&#xff0c;重启电脑。 4、重启后选择“疑难解…

信息采集-火车采集器

最近一位同事提出要采集alibaba上的公司信息&#xff0c;关键词是工业加湿器。 主管把任务分配给我后&#xff0c;推荐了一款软件&#xff0c;火车采集器&#xff08;真心不是做广告&#xff09;。 研究了两天&#xff0c;还算简单&#xff0c;除了正则表达式似懂非懂&#xff…

在Linux系统安装Nginx及配置https加密访问

2019独角兽企业重金招聘Python工程师标准>>> 1、安装nginx ①、为了确保能在 nginx 中使用正则表达式进行更灵活的配置&#xff0c;安装之前需要确定系统是否安装有 PCRE&#xff08;Perl Compatible Regular Expressions&#xff09;包。您可以到 ftp://ftp.csx.c…

mysql cstmt_MySQL

创建一个以JDBC连接数据库的程序&#xff0c;包含7个步骤&#xff1a;1、加载JDBC驱动程序&#xff1a;在连接数据库之前&#xff0c;首先要加载想要连接的数据库的驱动到JVM(Java虚拟机)&#xff0c;这通过java.lang.Class类的静态方法forName(String className)实现。例如&am…

mkv210_image.c文件详解(为BL1添加校验头)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 1、mkv210_image.c的使用演示 裸机程序中的Makefile是把程序的编译和链接过程分开的。实际上真正的项目的Makefile也是这样的&#xff0c;只是平时我们用gcc a.c -o exe这种方式编译时&#xff0c;把…

和菜鸟一起学linux之bluez学习记录2

这里主要摘取对于hci&#xff0c;l2cap&#xff0c;sdp和rfcomm的一些应用编程。 关于hci 一、HCI层协议概述 1、HCI Command Packets 详见bluez源码&#xff1a;lib/hci.h /* Link Control */ #define OGF_LINK_CTL 0x01 #define OCF_INQUIRY 0x0001 #define OCF_…

AppDelegate.h

2019独角兽企业重金招聘Python工程师标准>>> #ifndef __APP_DELEGATE_H__ #define __APP_DELEGATE_H__#include "CCApplication.h" //CCApplication.h能根据平台打开对应的平台头文件 /** brief The cocos2d Application.The reason for implement as …

wamp替换mysql_将wamp集成的mysql替换成安装版的

替换原因&#xff1a;wamp集成的mysql错误提示乱码。修改文件&#xff1a;路径C:\wamp下的wampmanager.conf&#xff0c;wampmanager.ini&#xff0c;uninstall_services.bat路径C:\wamp\bin\mysql\mysql5.6.17下的wampserver.conf步骤&#xff1a;1.安装wamp和mysql&#xff0…

关于uboot的简介——uboot的一些常识介绍

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、uboot的由来 1、uboot从哪里来的&#xff1f; uboot是SourceForge上的开源项目。uboot项目的作者&#xff1a;一个德国人最早发起的项目。uboot就是由一个人发起&#xff0c;然后由整个网络上所…

有目标

生活就是每一天都有一个目标&#xff0c;不管大或者小&#xff0c;只要很好的完成了&#xff0c;都会觉得很有成就感&#xff01;转载于:https://www.cnblogs.com/jackychua/archive/2013/04/01/2994434.html

虚拟机上网以及互ping问题

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 虚拟机设置静态IP和上网问题 &#xff08;1&#xff09;在“虚拟机——设置——网络适配器”中选择桥接模式&#xff1b; &#xff08;2&#xff09;在“编辑——虚拟网络编辑器”中&#xff0c;选择桥接到有…

php定时执行原理

即使关掉浏览器也能继续执行 ignore_user_abort(); //即使Client断开(如关掉浏览器)&#xff0c;PHP脚本也可以继续执行. set_time_limit(0); // 执行时间为无限制&#xff0c;php默认的执行时间是30秒&#xff0c;通过set_time_limit(0)可以让程序无限制的执行下去 转载于:htt…

php递归无限极分类

递归无限级分类有几种形式&#xff0c;我这里仅仅举例比較经常使用的三种&#xff1a; 第一种&#xff1a;返回有排序的数组&#xff1a; <?php$data array(1 > array(id > 1,pid > 0,user_name > one,),2 > array(id > 2,pid > 1,user_name > tw…

qt 飞扬青云_R语言学习——实例标识符

> patientID> age> diabetes> status> patientdata> #在上述创建的病例数据框中&#xff0c;病人编号(patientID)用于区分数据中的不同个体&#xff0c;在R中实例标识符(case identifier)可以通过数据框操作函数中的rowname选项指定&#xff0c;如下代码&…

Makefile中的赋值符号:=、:=、?=、+=

参考博客&#xff1a; Makefile赋值符号的使用——"" ":" "?" ""_秦伟H的博客-CSDN博客 1、“”&#xff0c;是最基本的赋值 make将整个Makefile展开后再决定变量的值&#xff0c;变量的值等于Makefile中最后给这个变量所指定的值&am…