zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

深入浅出MySQL复制--MySQL的"核心科技"

2023-03-07 09:13:14 时间

前言

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/

ps: 后台回复"技术群",加技术交流群