Heim  >  Artikel  >  Datenbank  >  Mysql复制架构_MySQL

Mysql复制架构_MySQL

WBOY
WBOYOriginal
2016-06-01 13:32:39979Durchsuche

bitsCN.com

Mysql复制架构
 Mysql复制架构_MySQL
这是mysql主从复制最基本的原理图,左边是主master,右边是从slave,从图中可以清晰看到mysql的复制进程,master产生二进制日志binlog,输出到binlog文件,然后slave主机请求日志文件,master主机发送二进制到slave主机,二进制到slave后,写入中继日志,realylog,然后slave主机调用sql进程读取中继日志内容,写入到数据库,从而维持服务器的数据同步。
 Mysql复制架构_MySQL
和上面不同的是,这个架构是一个三级架构,三台mysql服务器组成一个链式复制架构
,从左至右的master--slave--slave,前面两个,即master--slave和第一个图一样,没什么可说的,唯一的小变化是中间的slave主机也开启了二进制日志,他把从master上更新到的信息写入自身的logbin中,这样的目的可以从图中看到,为后面的slave主机提供二进制日志,此时这台slave主机其实充当了master主机的作用。
 Mysql复制架构_MySQL
这个图中说明了mysql二进制日志的过滤,除非你想同步所有的数据库(包括mysql数据库,这会造成不必要的麻烦),二进制的日志过滤主要取决于master主机的设置binlog_do_db和binlog_ignore_db,他们决定了什么数据会记录到二进制日志中,并传送到slave主机,而slave主机也可以通过配置一些选项决定怎么利用这些数据,如replicate_do_db,replicate_do_table等
 Mysql复制架构_MySQL
这个是一主多从的复制架构,实际应用也很多,可以用master来充当更新服务器,其他的几台slave充当只读服务器,在一定程度上分担了数据库流量,一定确保只在master上更新数据。
Mysql复制架构_MySQL
这个一个主主复制的架构,两台master互为主从,更新和读取操作可以同时在两台上进行、
Mysql复制架构_MySQL
这是一个反例,这种复制是不被允许的,一台slave不可能同时接受两台master的数据,不过我们可以考虑其他的办法来实现,比如后面的blackhole数据存储引擎就可以实现。
Mysql复制架构_MySQL
这个则是在主主复制架构上的一个扩展,每台master下面还有一层slave结构
Mysql复制架构_MySQL
这个其实也是主主复制结构的扩展(我的个人理解)只是master的结构组成了一个环状结构
Mysql复制架构_MySQL
这个也就容易理解,在环状结构的基础上又延伸出slave层。
Mysql复制架构_MySQL
这个图不太好理解,因为中间涉及到一个blackhole(黑洞)存储引擎,blackhole其实就相当于 linux系统中的/dev/null 
Mysql复制架构_MySQL
主要意思就是一主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后再细细研究
Mysql复制架构_MySQL
Mysql复制架构_MySQL
最后这种情况大致的意思,有三台mysql server,1,2和3,3做为复制从服务器,想同时复制1上的DB1和2上的DB2,这样可以在2上引进一个blackhole的DB1来解决问题.

bitsCN.com
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn