mysql主从同步原理

MySQL主从同步,即MySQL Replication,可以实现将数据从一台数据库服务器同步到多台数据库服务器。MySQL数据库自带主从同步功能,经过配置,可以实现基于库、表结构的多种方案的主从同步。
MySQL主从同步的作用主要有以下几点:
1、故障切换。
2、提供一定程度上的备份服务。
3、实现MySQL数据库的读写分离。

一、同步过程
mysql主从同步中设计三个线程(log dump thread,i/o thread,sql thread),两个日志(bin log ,relay log)。


主节点 log dump 线程

当从节点连接主节点时,主节点会创建一个log dump 线程,用于发送bin-log的内容。在读取bin-log中的操作时,此线程会对主节点上的bin-log加锁,当读取完成,甚至在发动给从节点之前,锁会被释放。

从节点I/O线程 当从节点上执行start
slave命令之后,从节点会创建一个I/O线程用来连接主节点,请求主库中更新的bin-log。I/O线程接收到主节点binlog dump
进程发来的更新之后,保存在本地relay-log中。

从节点SQL线程
SQL线程负责读取relay log中的内容,解析成具体的操作并执行,最终保证主从数据的一致性。

执行流程

在这里插入图片描述
数据库更新后会将更新的数据写入到bin log当中,从从节点i/o线程读取主节点bin log 将内容更新到relay log中,在通过sql进程在从节点上执行。

二、主从实现方式

 最早搞主从是为了主备,也就是master是主机,salve是备机。因为早期软件的数据量与并发性并不高。主机完全支撑得住日常的使用。
所以通过主备的形式,保证db高可用,当检测到主db挂掉的时候,自动将服务的数据源切换到备db。
随着业务的发展,大家发现单master往往很难支撑的住业务的需要,因此对传统的主从开始进行了扩展。

1)一主一从
从机不仅仅作为备机,而且还作为读数据源的db,业务服务写数据时,写到主机,读数据时,从从机上读。从而降低主机的压力
(2)一主多从
主写从读之后,我们发现单一的从节点在支撑业务查询数据时,还是存在性能瓶颈,因此将从机进行水平扩展,实现多从。
(3)双M
从机的身份提升为主机,两个主机互为对方的从机,共同分担读写压力
(4)联级复制
联级复制和一主多从比较相像,区别是次级别的从机的数据来源是来自于从机而不再是主机。这样主要是考虑到从机变多后,同步数据对主机性能的影响
(5)多主一从
多主应用在写多读少的场景,通过多主降低主机的压力,同时通过1个从机,来完成读操作和数据备份的能力

二、MySQL主从同步方式
复制方式(默认是异步方式,不保证数据的一致性)
MySQL 主从复制默认是异步的模式。MySQL增删改操作会全部记录在binary log中,当slave节点连接master时,会主动从master处获取最新的bin log文件,并把bin log中的sql 通过I/O relay到本地。

异步模式(mysql async-mode) 这种模式下,主节点不会主动push bin
log到从节点(主节点执行完直接提交),这样有可能导致failover的情况下,也许从节点没有及时的将最新的bin log同步到本地。

在这里插入图片描述


全同步模式(保持数据的一致性
全同步模式是指主节点和全部从节点执行了commit并确认才会向客户端返回成功
半同步模式(mysql semi-sync)
这种模式下主节点只需要接收到其中一台从节点的返回信息(一个从节点commit),就会commit;否则需要等待直到超时时间然后切换成异步模式再提交;
binlog记录格式
binlog的生成有三种方式

基于SQL语句的复制(statement-based replication,SBR)
基于行的复制(row-based replication,RBR)
混合模式复制(mixed-based replication,MBR)
基于SQL语句的复制
Statement-base Replication (SBR)就是记录sql语句在bin log中,Mysql 5.1.4 及之前的版本都是使用的这种复制格式。
优点:只需要记录会修改数据的sql语句到binlog中,减少了binlog日质量,节约I/O,提高性能。
缺点:在某些情况下,会导致主从节点中数据不一致(比如sleep(),now()等)。

基于行的复制
Row-based Relication(RBR)是mysql master将SQL语句分解为基于Row更改的语句并记录在bin log中,也就是指记录哪条数据被修改了,修改成什么样。
优点:不会出现某些特定情况下的存储过程、或者函数、或者trigger的调用或者触发无法被正确复制的问题。
缺点:会产生大量的日志,尤其是修改table的时候会让日志暴增,同时增加bin log同步时间。也不能通过bin log解析获取执行过的sql语句,只能看到发生的data变更。

混合模式复制
Mixed-format Replication(MBR),MySQL NDB cluster 7.3 和7.4 使用的MBR。是以上两种模式的混合,对于一般的复制使用STATEMENT模式保存到binlog,对于STATEMENT模式无法复制的操作则使用ROW模式来保存,MySQL会根据执行的SQL语句选择日志保存方式。

三、MySQL主从同步常见方案
(一)M-S
M-S即采用一个MySQL主库,多个MySQL从库的方式,原理如下所示:

M-S的架构,最大的问题在于MySQL主库面临单点瓶颈和单点故障问题,I/O压力过大。

(二)M-S-S
为了环节M-S架构中MySQL主库压力过大的问题,我们还可以采用M-S-S架构,其中一个Slave Relay负责从MySQL主库同步数据,但是其本身并不存在数据,该设备作用仅仅是在日志层面。其他的MySQL从库不是从MySQL主库上同步数据,而是从中继Slave上同步数据,这样一来,就可以缓解Master的I/O压力了,M-S-S架构如下所示:


(三)M-M
M-M即两台数据库互为主备,互相同步,每个数据库的更新都会同步到另一个数据库中,有时,我们还可以采用多台数据库,组成环装更新架构。M-M架构如下所示:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_43585822

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值