
lazydays
2023/02/11阅读:9主题:默认主题
浅析MySQL复制--MySQL的"核心技术"
前言
MySQL复制是MySQL成功的最重要原因之一,前东家某公司内网上有相关资料,低下评论戏称"核心科技",今天将核心科技分享给大家
一 MySQL复制简介
复制:从一个MySQL数据库实例(称为源端)复制到一个或多个MySQL数据库实例(称为副本,或者目标端)
复制方式:异步复制、半同步复制、组复制
范围:所有数据库、选定的数据库、选定的表
过程:
1、在主库上把数据更改事件记录到二进制日志中
2、从库上的I/O线程向主库请求二进制日志中的事件
3、主库上的binlog dump线程向I/O线程发送二进制事件
4、从库上的I/O线程将二进制日志事件复制到自己的中继日志中
5、从库上的SQL线程读取中继日志中的事件,并将其重放到从库上

图1 MySQL复制示意图
解决方案:扩展读负载、提供高可用性、地理冗余(同城双活、异地备份)、备份、提供分析业务

图2 MySQL复制提供解决方案
二 复制发展历史

三 复制种类
1 传统复制(异步复制)

图3 传统复制示意图
传统复制是主库直接将二进制文件发送给从库,不关注从库的后续操作;
2 半同步复制

图4 半同步复制示意图
半同步复制是主库等待从库反馈信息后再提交事务,有after_sync和after_commit两种模式;

图5 半同步复制FATER_COMMIT流程图
Master的数据写入了binlog,slave 刷新到磁盘(relay log),同时master需要等待slave 反馈收到relay log,只有收到ACK后master才将commit OK结果反馈给客户端;
图6 半同步复制AFTER_SYNC流程图
AFTER_SYNC模式下,事务是在提交之前发送给Slave,当Slave没有接收成功,并且如果发生Master宕机的场景,不会导致主从不一致,因为此时Master端还没有提交,所以主从都没有数据,这样就能够满足数据完整性和一致性了。
3 组复制(强一致)
组复制是节点间通过GCS(Group Communication System)进行交互。
四 半同步复制并行优化过程
单线程复制-->5.6版本Schema级别的并行复制-->5.7版本 基于Group Commit的并行复制、LOGICAL_CLOCK并行复制-->8.0 版本基于WriteSet的并行复制
五 参考文章来源
1、GreatSQL社区--《组复制技术架构 | 深入浅出MGR》https://greatsql.cn/blog-10-4.html
2、杨建荣的学习笔记--《MySQL半同步复制》https://cloud.tencent.com/developer/article/1426830?areaSource=&traceId=
3、阿里内核月报--《MySQL · 特性分析 · 8.0 WriteSet 并行复》http://mysql.taobao.org/monthly/2018/06/04/
欢迎关注:DBA札记
作者介绍
