在很多场景下,MySQL 的高可用都是借助主从复制实现的,而 MySQL 复制不断的演进,也使得她越来越受欢迎。
1 三种日志格式对复制的影响
1.1 开始支持复制
MySQL 从 3.23 版本开始支持复制,但是在 5.1.5 之前只支持 statement 格式的复制,尽管这种模式下,binlog 日志量相对比较少,但是涉及到跨库更新、或者使用结果不确定的函数时,比如 UUID(),容易出现主从数据不一致的情况。
1.2 开始支持 Row 格式的复制
从 MySQL 5.1.5 开始,新增了 Row 格式,日志中会记录每一行数据被修改的形式,因此 Row 格式下的复制,主从之间的数据一致性保障得到了大幅度提升,但是缺点是 binlog 日志量相对 statement 较多。
1.3 新增 mixed 格式
从 MySQL 5.1.8 开始新增 mixed 格式,当可能造成主从数据不一致的 SQL 时,binlog 使用 row 格式记录,否则使用 statement 格式记录。显然这种格式下,日志量是介于 statement 和 row 格式之间的。
2 半同步复制
2.1 异步复制
传统的 MySQL 复制为异步复制,其原理如下:
-
在主库开启 binlog 的情况下;
-
如果主库有变更操作,会记录到 binlog 中;
-
主库通过 IO 线程把 binlog 里面的内容传给从库的中继日志(relay log)中;
-
主库给客户端返回 commit 成功(这里不管从库是否已经收到了事务的 binlog);
-
从库的 SQL 线程负责读取它的 relay log 里的信息并应用到从库数据库中。
其过程如下图:

2.2 半同步复制
-
在主库开启 binlog 的情况下; -
如果主库有增删改的语句,会记录到 binlog 中; -
主库通过 IO 线程把 binlog 里面的内容传给从库的中继日志(relay log)中; -
从库收到 binlog 后,发送给主库一个 ACK,表示收到了; -
主库收到这个 ACK 以后,才能给客户端返回 commit 成功; -
从库的 SQL 线程负责读取它的 relay log 里的信息并应用到从库数据库中。

2.3 增强半同步复制
3 组复制

4 并行复制
4.1 MySQL 5.6 的并行复制
4.2 MySQL 5.7 的并行复制
4.3 MySQL 5.7.22 的并行复制
-
COMMIT_ORDER,表示的就是前面介绍的,根据同时进入 prepare 和 commit 来判断是否可以并行的策略。 -
WRITESET,表示的是对于事务涉及更新的每一行,计算出这一行的 hash 值,组成集合 writeset。如果两个事务没有操作相同的行,也就是说它们的 writeset 没有交集,就可以并行。 -
WRITESET_SESSION,是在 WRITESET 的基础上多了一个约束,即在主库上同一个线程先后执行的两个事务,在备库执行的时候,要保证相同的先后顺序。
5 基于 GTID 的复制
About Me
........................................................................................................................ ● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除 ● 本文在个人微 信公众号( DB宝)上有同步更新 ● QQ群号: 230161599 、618766405,微信群私聊 ● 个人QQ号(646634621),微 信号(db_bao),注明添加缘由 ● 于 2020年11月完成 ● 最新修改时间:2020年11月 ● 版权所有,欢迎分享本文,转载请保留出处 ........................................................................................................................ ● 小麦苗的微店: https://weidian.com/s/793741433?wfr=c&ifr=shopdetail ● 小麦苗出版的数据库类丛书: http://blog.itpub.net/26736162/viewspace-2142121/ ● 小麦苗OCP、OCM、高可用、DBA学习班: http://blog.itpub.net/26736162/viewspace-2148098/ ● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/ ........................................................................................................................ 请扫描下面的二维码来关注小麦苗的微 信公众号( DB宝)及QQ群(230161599、618766405)、添加小麦苗微 信(db_bao), 学习最实用的数据库技术。
........................................................................................................................ |