3.3、复制相关的文件
除了二进制日志和中继日志文件外,还有其它一些与复制相关的文件 。如下:
(1)mysql-bin.index
服务器一旦开启二进制日志,会产生一个与二日志文件同名,但是以.index结尾的文件 。它用于跟踪磁盘上存在哪些二进制日志文件 。MySQL用它来定位二进制日志文件 。它的内容如下(我的机器上):
文章插图
(2)mysql-relay-bin.index
该文件的功能与mysql-bin.index类似,但是它是针对中继日志,而不是二进制日志 。内容如下:
.mysql-02-relay-bin.000017
.mysql-02-relay-bin.000018
(3)master.info
保存master的相关信息 。不要删除它,否则,slave重启后不能连接master 。内容如下(我的机器上):
文章插图
I/O线程更新master.info文件,内容如下(我的机器上):
.mysql-02-relay-bin.000019254mysql-01-bin.000010286052813(4)relay-log.info
包含slave中当前二进制日志和中继日志的信息 。
3.4、发送复制事件到其它slave
当设置log_slave_updates时,你可以让slave扮演其它slave的master 。此时,slave把SQL线程执行的事件写进行自己的二进制日志(binary log),然后,它的slave可以获取这些事件并执行它 。如下:
文章插图
3.5、复制过滤(Replication Filters)
复制过滤可以让你只复制服务器中的一部分数据,有两种复制过滤:在master上过滤二进制日志中的事件;在slave上过滤中继日志中的事件 。如下:
文章插图
4、复制的常用拓扑结构
复制的体系结构有以下一些基本原则:
(1) 每个slave只能有一个master;
(2) 每个slave只能有一个唯一的服务器ID;
(3) 每个master可以有很多slave;
(4) 如果你设置log_slave_updates,slave可以是其它slave的master,从而扩散master的更新 。
MySQL不支持多主服务器复制(Multimaster Replication)——即一个slave可以有多个master 。但是,通过一些简单的组合,我们却可以建立灵活而强大的复制体系结构 。
4.1、单一master和多slave
由一个master和一个slave组成复制系统是最简单的情况 。Slave之间并不相互通信,只能与master进行通信 。如下:
文章插图
如果写操作较少,而读操作很时,可以采取这种结构 。你可以将读操作分布到其它的slave,从而减小master的压力 。但是,当slave增加到一定数量时,slave对master的负载以及网络带宽都会成为一个严重的问题 。
这种结构虽然简单,但是,它却非常灵活,足够满足大多数应用需求 。一些建议:
(1) 不同的slave扮演不同的作用(例如使用不同的索引,或者不同的存储引擎);
(2) 用一个slave作为备用master,只进行复制;
(3) 用一个远程的slave,用于灾难恢复;
4.2、主动模式的Master-Master(Master-Master in Active-Active Mode)
Master-Master复制的两台服务器,既是master,又是另一台服务器的slave 。如图:
文章插图
主动的Master-Master复制有一些特殊的用处 。例如,地理上分布的两个部分都需要自己的可写的数据副本 。这种结构最大的问题就是更新冲突 。假设一个表只有一行(一列)的数据,其值为1,如果两个服务器分别同时执行如下语句:
在第一个服务器上执行:
mysql> UPDATE tbl SET col=col + 1;
在第二个服务器上执行:
mysql> UPDATE tbl SET col=col * 2;
那么结果是多少呢?一台服务器是4,另一个服务器是3,但是,这并不会产生错误 。
实际上,MySQL并不支持其它一些DBMS支持的多主服务器复制(Multimaster Replication),这是MySQL的复制功能很大的一个限制(多主服务器的难点在于解决更新冲突),但是,如果你实在有这种需求,你可以采用MySQL Cluster,以及将Cluster和Replication结合起来,可以建立强大的高性能的数据库平台 。但是,可以通过其它一些方式来模拟这种多主服务器的复制 。
4.3、主动-被动模式的Master-Master(Master-Master in Active-Passive Mode)
这是master-master结构变化而来的,它避免了M-M的缺点,实际上,这是一种具有容错和高可用性的系统 。它的不同点在于其中一个服务只能进行只读操作 。如图:
推荐阅读
- 处理声音与画面的分离编辑,使用Camtasia
- MySQL设置最大连接数
- 九个MySQL数据库经典错误
- mysql之my.cnf/my.ini常用配置整理
- mysql中你应该要知道的变量知识点
- 3分钟学会mysql数据库的逻辑架构原理
- MySQL事务处理与并发控制
- Python 实现docx文件的读写操作
- 详解mysql三大时间函数
- 春节后儿子离家准备返岗 母亲患上分离焦虑症