文档章节

MySQL系列连载之主从复制原理

 云端等你
发布于 2017/05/01 15:10
字数 1751
阅读 7
收藏 0

Mysql 复制(Replication)

1、Mysql 复制作用

  • 负载平衡(load balancing)
  • 备份
  • 高可用性(high availability)和容错

2、Mysql 复制原理

主要有三步(如下图):

master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);

slave将master的binary log events拷贝到它的中继日志(relay log);

slave重做中继日志中的事件,将改变它自己的数据。

MySQL系列连载之主从复制原理MySQL系列连载之主从复制原理

具体说明:

该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二进制日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。

下一步就是slave将master的binary log拷贝到它自己的中继日志。 首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。 Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会休眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。

SQL slave thread处理该过程的最后一步。SQL线程从中继日志读取事件,更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。所以slave上数据一般要慢于master上数据。即master与slave之间的数据在一定时间内会不同步。

Mysql 复制(Replication)类型

1、一主多从模式

注,由一个master和一个slave组成复制系统是最简单的情况。Slave之间并不相互通信,只能与master进行通信。

MySQL系列连载之主从复制原理MySQL系列连载之主从复制原理

具体说明:

如果写操作较少,而读操作很多时,可以采取这种架构。你可以将读操作分布到其它的slave,从而减小master的压力。

但是,当slave增加到一定数量时,slave对master的负载以及网络带宽都会成为一个严重的问题。

这种架构虽然简单,但是,它却非常灵活,足够满足大多数应用需求。

一些建议:

不同的slave扮演不同的作用(例如使用不同的索引,或者不同的存储引擎)

用一个slave作为备用master,只进行复制

用一个远程的slave,用于灾难恢复

发送复制事件到其它slave,当设置log_slave_updates时,你可以让slave扮演其它slave的master。

此时,slave把SQL线程执行的事件写进自己的二进制日志(binary log),然后,它的slave可以获取这些事件并执行它
MySQL级联复制(A->B->C)log_slave_updates

MySQL主从结构实际中是用到最多的一种架构。

新上的两台服务器B和C,要替换掉之前旧的服务器A,同时,B和C是新的主从关系。因此,配置成级联复制,来迁移数据,也方便切换。

架构图如下:

master A ——> slave B ——> slave C

有这么情况发生了,服务器B可以正常复制服务器A的数据,服务器B和C主从状态Slave_IO_Running和Slave_SQL_Running都是yes的,但是服务器C却无法复制新的数据。

原因分析:

1. 检查服务器B有没有开启二进制日志log_bin

2. log_slave_updates是否启用

log_slave_updates是将从服务器从主服务器收到的更新记入到从服务器自己的二进制日志文件中。

上面的问题是由于没有启用log_slave_updates = 1导致的。

总结:

因此,对于mysql级联复制,上游的从服务器不仅仅要开启log_bin还要开启log_slave_updates,否则将导致下游的从服务器无法更新复制。

2、双主模式

注,Master-Master复制的两台服务器,既是master,又是另一台服务器的slave。
MySQL系列连载之主从复制原理MySQL系列连载之主从复制原理

具体说明:

主的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结合起来,可以建立强大的高性能的数据库平台。

但是,可以通过其它一些方式来模拟这种多主服务器的复制。

3、主从模式

注,这是master-master结构变化而来的,它避免了M-M的缺点,实际上,这是一种具有容错和高可用性的系统。

MySQL系列连载之主从复制原理MySQL系列连载之主从复制原理

4、带从服务器的Master-Master结构(Master-Master with Slaves)

注,这种结构的优点就是提供了冗余。在地理上分布的复制结构,它不存在单一节点故障问题,而且还可以将读密集型的请求放到slave上。

MySQL系列连载之主从复制原理MySQL系列连载之主从复制原理

总结:一般常用的两种复制类型一种是主从模式,另一种是一主多从模式。在这我们主要讲解主从模式复制。

本文地址:http://www.linuxprobe.com/mysql-replication-theory.html

© 著作权归作者所有

粉丝 3
博文 126
码字总数 183841
作品 0
西安
私信 提问
MySQL传统主从复制(第一弹)

0、引言 MySQL主从复制的原理及搭建,故障分析 一、MySQL主从同步的架构及原理 原理: 1)Slave连接到master,主从数据一致,开启同步,开始同步数据 2) 用户在主上写入数据,日志储存到bin...

IT--小哥
2016/12/13
55
0
MySQL 数据库主从复制架构

前文《MySQL 数据库事务与复制》分析了 MySQL 复制过程中如何保证 binlog 和事务数据之间的一致性,本文进一步分析引入从库后需要保证主从的数据一致性需要考虑哪些方面。 原生复制架构 MySQ...

方墨大师
2016/01/14
109
0
mysql 主从复制的 工作原理

mysql 主从复制原理 主从形式 mysql主从复制 灵活 一主一从 主主复制 一主多从---扩展系统读取的性能,因为读是在从库读取的; 多主一从---5.7开始支持 联级复制--- 用途及条件 mysql主从复制...

我不是九爷
2018/07/13
0
0
docker学习系列12 轻松实现 mysql 主从同步

docker的一大好处是在本地可以很方便快速的搭建负载均衡,主从同步等需要多主机的环境。 可以说是极大方便了运维成本和难度。 本节在本地搭建mysql的一主一从的集群环境。 关于主从同步的流程...

飞凡的陀螺
2018/08/24
0
0
云数据库POLARDB优势解读系列文章之⑤——会话读一致性

作者 武藏等 POLARDB架构 我们知道,POLARDB是一个由多个节点构成的数据库集群,一个主节点,多个读节点。对外默认提供两个地址,一个是集群地址,一个是主地址,推荐使用集群地址,因为它具...

乙休
2018/11/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

灵光一闪来个科普贴:Linux文件系统

在计算机系统中,各种需要保存的信息都是以文件的形式存在的。文件管理是对系统信息资源的管理,是操作系统的一项重要功能。 1.文件与文件系统: 1.1文件: 文件是具有名字的一组相关信息的有...

Linux就该这么学
18分钟前
3
0
ExtJS 4.2 评分组件

本文转载于:专业的前端网站➸ExtJS 4.2 评分组件 上一文章是扩展ExtJS自带的Date组件。在这里将创建一个评分组件。 目录 1. 介绍 2. 示例 3. 资源下载 1. 介绍 代码参考的是 Sencha Touch 2...

前端老手
21分钟前
3
0
如何为视频添加封面?

一个好的视频封面可以吸引观众的眼球,从而起到事半功倍的宣传效果,但是很多小伙伴并不知道怎么给视频添加封面。下面分享一个制作封面否方法,操作起来也比较简单的,有兴趣的小伙伴请接着往...

白米稀饭2019
31分钟前
3
0
如何使用soapUI模拟webservice客户端发送请求

参考资料 https://jingyan.baidu.com/article/cbcede0712849a02f40b4d88.html 左边是请求参数,可以自己填写!按着那个绿色三角箭头可以模拟发送请求,右边是返回的报文 soapui如何发送xml格...

故久呵呵
今天
5
0
Java Security 介绍

1.介绍 Java平台设计的重点是安全性。在其核心,java语言本身是类型安全的并且提供了垃圾自动回收,这使其增加了应用程序代码的健壮性。安全的类加载以及验证机制确保了只有合法的代码才能够...

lixiaobao
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部