MySQL 运维实战课
张新铭(俊达)
云掣科技资深数据库专家,前淘宝网、支付宝数据库专家
1026 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已更新 37 讲/共 41 讲
MySQL 运维实战课
15
15
1.0x
00:00/00:00
登录|注册

35|MySQL半同步能提高主备数据的一致性吗?

你好,我是俊达。
上一讲中,我留了一个问题,就是在默认的情况下,MySQL 的数据复制是异步的,当主库意外崩溃后,备库是否有可能比主库多执行一些事务?
回答这个问题,需要对主库事务提交的过程,以及数据复制的细节有更深入的了解。这一讲我们就来看一看事务的提交过程,分析 Binlog 是什么时候发送给备库的,还有 Semi-Sync 插件在中间起到的作用。这里我假定只使用了 InnoDB 存储引擎,开启了 GTID,并且使用了 ROW 格式 Binlog,这也是推荐的使用方式。

MySQL 数据复制回顾

下面这张数据复制的架构图,你应该在上一讲中就看到过了。
我们回顾一下。
用户线程在执行事务的过程中不断产生 Binlog 事件。Binlog 事件的内容和事务中执行的语句相关,同时也受参数 binlog_format 影响。产生的 Binlog 事件会先缓存到 Binlog Cache 中。每一个用户线程都有各自独立的 Binlog Cache。
提交事务时,用户线程将 Binlog Cache 中的数据写入到 Binlog 文件。一个事务会产生多个 Binlog 事件,这些事件在 Binlog 文件中是连续存放的。一个线程在往 Binlog 文件中写入数据时,其他线程要等待之前的线程写完数据,才能写入 Binlog 文件。
用户线程将 Binlog 事件写入到文件或将 Binlog 文件同步到磁盘后,通知 Dump 线程有新的 binlog 事件产生,通知的具体时机跟参数 sync_binlog 的设置有关系。
对每一个备库上的 IO 线程,主库上都会创建一个 Dump 线程。Dump 线程负责将已提交事务的 Binlog 事件发送给 IO 线程。
IO 线程接收到 Binlog 事件后,将事件写入 RelayLog 文件。
SQL 线程从 RelayLog 文件中解析出 Binlog 事件,并进行应用。启用了多线程复制时,SQL 线程也称为协调线程。备库上参数 replica_parallel_workers 设置为大于 1 的值,就能开启多线程复制。参数 replica_parallel_type 用来控制并行复制的方式,建议设置为 LOGICAL_CLOCK。
如果启用了多线程复制,SQL 线程会将 Binlog 事件分发给各个 Worker 线程。
SQL 线程或 Worker 线程执行 Binlog 事件。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. MySQL数据复制的架构和流程,包括Binlog事件生成、写入Binlog文件、Dump线程发送给IO线程等步骤。 2. 主库事务提交过程,包括Binlog Cache的使用、二阶段提交的Prepare和Commit阶段、组提交的Binlog Flush和Binlog Sync阶段。 3. 参数sync_binlog对Binlog持久化的影响,以及可能导致备库比主库执行更多事务的情况。 4. 半同步(Semi Sync)的应用,包括开启半同步、AFTER_SYNC和AFTER_COMMIT设置等步骤。 5. 主库和备库安装半同步插件及相关参数设置。 6. 半同步的退化状态和监控建议。 7. 半同步的作用和优势,以及在主备数据一致性方面的应用。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《MySQL 运维实战课》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)