Mysql的数据复制过程

一、 Mysql的复制原理

1.mysql 主库在事务提交时,会把数据变更作为事件Events 记录在二进制日志文件Bin Log中

2.主库推送二进制日志文件Bin Log 中的事件到从库的中继日志Relay Log,之后从库根据中继日志Relay Log做数据变更操作,通过逻辑复制,到达主从数据一致

注:Mysql 通过3个线程完成主从数据复制,分别为,1)主库的BinLog Dump 线程,2)从库的I/O线程,3)从库的SQL线程
在这里插入图片描述

二、Bin Log 与 ReLay Log 的区别

1.Bin Log 是Mysql Server 的日志文件,以二进制形式记录所有数据修改操作的日志文件,包括Create 、Drop 、Insert 、Update 、Delete 操作等

2.Relay Log 中继日志文件,与Bin Log 区别在于,SQL线程在执行完Relay Log 里的事件后会被删除,减少磁盘空间占用,而Bin Log 不会被删除

注:为保证从库数据复制被打断,之后重新开始。从库会默认创建master.info 和 relay-log.info
两个文件用来保存复制的进度

1. master.info I/O 线程当前读取主库二进制日志Bin Log 的进度
2. relay-log.info SQL 线程执行中继日志Relay Log 的进度

三、Mysql的三种复制方式

1.Statement 基于SQL语句级别的Bin Log,每条修改数据的SQL 保存到Bin Log 里

2.Row 基于行级别记录每一行数据的变化,记录详细,但不保存原始SQL,复制的时候不会因为存储过程或触 发器造成主从库数据不一致

3.Mixed 混合Statement 和Row 模式,默认采用Statement 模式记录,某些情况切换单Row 模式,例如SQL中包含时间、用户相关函数等

四、Mysql 复制数据常见架构

1. 一主多从复制

在这里插入图片描述

优点:实现读写读写分离,把大量对实时性要求不是特别高的读请求通过负载均衡分布到多个从库上,降低主库的读取压力

缺点:主库的I/O压力和网络压力会随着从库增加而增长,每个从库都会在主库有一个BinLog Dump线程

2. 多级复制

在这里插入图片描述

优点:主库Master1秩序要给一个二级主库Master2推送BinLog日志即可,减轻Master1的压力,二级主库Master2推送数据给从库

缺点:数据需要经理两次复制才能到达从库,数据更新延时大

3. 双主复制

在这里插入图片描述

4. 双主多从复制

在这里插入图片描述


版权声明:本文为u013478983原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>