一、如何同步
实现主从复制大部分都是为了实现读写分离。
MySQL复制过程分成三步:
1、master将改变记录到二进制日志(binary log)。这些记录过程叫做二进制日志事件,binary log events;
2、slave将master的binary log events拷贝到它的中继日志(relay log) ;
3、slave重做中继日志中的事件,将改变应用到自己的数据库中。MySQL复制是异步的且串行化的
备注:主从复制的最大问题是延迟。
在 MySQL 主从复制中,Relay Log(中继日志)是用于存储主服务器上的二进制日志(Binary Log)
的中继服务器上的一个本地副本。
Relay Log 在主从复制过程中扮演着关键的角色,用于传递和保存主服务器上的[变更事件],
以便从服务器可以将这些变更应用到自己的数据库中。
1、主服务器、从服务器、中继服务器
流程:
主服务器发送binlog日志,从服务器收到binlog日志保存到中继服务器中,中继服务器将变更应用到本地,同时中继服务器将这个同步给其他从服务器。帮助主服务器分发变更。
在 MySQL 主从复制集群中,主服务器(Master)、从服务器(Slave),以及中继服务器(Relay)之间有以下关系如下
1、主服务器(Master):
主服务器是负责处理写操作(INSERT、UPDATE、DELETE)的服务器。当数据发生变更时,主服务器将变更记录到二进制日志(Binary Log)中,并将这些变更事件发送给从服务器。
2、从服务器(Slave)
从服务器是负责处理读操作的服务器,它通过从主服务器获取并应用主服务器上的变更事件来保持与主服务器数据的一致性。从服务器连接到主服务器,并通过复制线程(Replication
Thread)获取主服务器上的二进制日志事件,并在本地的中继日志(Relay Log)中存储这些事件。
3、中继服务器(Relay)
中继服务器是从服务器(Slave)中的一部分,用于【存储】从主服务器获取的二进制日志事件。中继服务器在接收到主服务器的变更事件后,将其存储到【中继日志】(Relay
Log)中, 并通过中继日志的方式传递[给其他从服务器]。中继服务器充当从服务器和其他从服务器之间的中继站点,帮助分发主服务器的变更。
二、主从节点模式
mysql主从复制多种模式:跳转
主要是:
单向主从复制: 一个主,多个从或者1个从。
双向主从同步: 2个都是主,没有从,如果站在某一台机器上,那么自己就是从。另一个就是主。
优点:
作为备用数据库,并且不影响业务
可做读写分离,一个写库,一个或多个读库,在不同的服务器上,充分发挥服务器和数据库的性能,但要保证数据的一致性
2、数据一致性问题
"主从复制有延时", 这个延时期间读取从库,可能读到不一致的数据。
解决方案:
1、缓存记录写key法,在cache里记录哪些记录发生过的写请求,来路由读主库还是读从库
2、异步复制:
在异步复制中,主库执行完操作后,写入binlog日志后,就返回客户端,这一动作就结束了,并不会验证从库有没有收到,
完不完整,所以这样可能会造成数据的不一致。
半同步复制:
当主库每提交一个事务后,不会立即返回,而是等待其中一个从库接收到Binlog并成功写入Relay-log中才返回客户端,
通过一份在主库的Binlog,另一份在其中一个从库的Relay-log,可以保证了数据的安全性和一致性。
全同步复制:
指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,
所以全同步复制的性能必然会收到严重的影响。
读写分离:
主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE)
从数据库处理 SELECT 查询操作
分布式 mysql分布式集群实现原理,这里也包含为什么要读写分离,读写分离的缺点,以及中间件的实现。
跳转