0
点赞
收藏
分享

微信扫一扫

Mysql之架构复制原理

ZSACH 2022-03-18 阅读 73

Mysql主从架构:

1、将主数据库的ddl和dml操作通过二进制日志传到复制服务器(也叫从服务器)上,然后在从服务器上对这些日志重新执行(也叫重做),从而使得从服务器和主服务器的数据保持同步。

2、支持一台主服务器同时向多台从服务器进行复制,从服务器同时也可以作为其他服务器的主服务器,实现链状的复制,默认情况下,复制是异步的,从库不需要永久连接以接收主库的更新,根据配置,可以复制数据库中的所有数据库,某些数据库,某些表。

Mysql复制的优点:

(1) 如果主服务器出现问题,可以快速切换到从服务器提供服务。

(2) 可以在从服务器上执行查询操作,降低主服务器的访问压力。读写分离

(3) 可以在从服务器上执行备份,以避免备份期间影响主服务器的服务。热备份。

缺点:

由于mysql实现的是异步复制,所以主从库之间存在一定的差距,在从库上查询操作需要考虑到这些数据的差异。一般只有更新不频繁的数据或者对实时性要求不高的数据可以通过从库查询,实时性要求高的仍然需要从主数据库获取。

复制的原理:

(1) 首先mysql 主库在事务提交时会把数据变更作为事件events记录在二进制日志文件binlog中, mysql主库上的sync_binlog参数控制binlog日志刷新到磁盘。

(2) 主库推送二进制日志文件binlog中的事件到从库的中继日志relay log,之后从中继日志relay log 重做数据变更操作,通过逻辑复制以此来达到主库和从库的数据一致。

mysql 通过3个线程来完成主从库间的数据复制:其中binlog dump 线程跑在主库上,I/O线程和sql线程跑在从库上。当从库上启动复制(start slave)时,首先创建I/0线程连接主库,主库随后创建binlog dump线程读取数据库事件并发送给I/O线程,I/O线程获取事件数据后更新到从库的中继日志relay log中去,之后从库上的sql线程读取中继日志relay log中更新的数据库事件并应用。

复制的选择:

(1) 传统方法基于主机的二进制日志复制事件,并要求日志文件和它们的位置在主从之间同步。

(2) 新的方法是基于全局事务标识符(GTID)事务处理的,因此不需要处理这些文件中的日志文件或位置,这极大地简化了许多常见的复制任务。只要在主服务器上提交的所有事务应用于从服务器,使用GTID进行复制可确保主服务器和从服务器之间的一致性。

同步类型选择:

MySQL中的复制支持不同类型的同步。(1)原始的同步是单向异步复制,(2)还支持半同步复制(在mysql 5.5 版本中开始)。

二进制日志记录三种方式:

(1) Statement (SBR):基于SQL语句级的Binlog, 每条修改数据的SQL都会保存到Binlog里。

(2) Row(RBR): 基于行级别,记录每一行数据的变化,每行的数据的变化都记录到Binlog里面,记录非常详细,但并不记录原始SQL,记录的日志量比Statemnet  格式要大得多。

(3) Mixed(MBR):混合复制是混合Statement和Row,默认情况下采用Statement模式记录,某此情况下会切换到Row模式。

Mysql集群架构:

复制有常见的三种架构:一主多从复制架构,多级复制架构,双主复制架构。

举报

相关推荐

0 条评论