【MySQL—高可用】复制
对于一个数据库开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《【MySQL—高可用】复制》,主要介绍了MySQL,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!
MySQL内建的复制功能是构建基于MySQL的大规模、高性能应用的基础,这类应用使用所谓的“水平扩展”的架构。我们可以通过为服务器配置一个或多个备库的方式来进行数据同步。复制功能不仅有利于构建高性能的应用,同时也是高可用性、可扩展性、灾难恢复、备份以及数据仓库等工作的基础。
概述
复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。一台主库的数据可以同步到多台备库上,备库本身也可以被配置成另外一台服务器的主库。主库和备库之间可以有多种不同的组合方式。
适用场景
横向扩展
横向扩展是指在多个从库之间进行读负载均衡,以提高读性能。在此扩展方案中,所有数据变更在主库上执行,读负载可以分摊到一个或者多个从库上。
数据安全
数据安全性在很大程度上需要靠数据副本来保证。在这里,副本可以理解为我们通常所说的备份。
数据分析
在主库上运行OLTP(联机事务处理)应用,而OLAP(联机分析处理)应用可以在从库上运行,避免在主库上运行OLAP应用对主库性能造成影响。
远程数据分发
可以使用复制特性为远程站点创建数据的本地副本,那些对数据实时性没有要求的应用可以访问本地副本,剩下的一小部分对实时性有要求的应用访问主库。远程站点既可以作为灾备中心,也可以用于实现跨地域访问以分摊负载,以及实现就近访问,加快访问速度。
滚动升级
使用一个更高版本的MySQL作为备库,保证在升级全部实例前,查询能够在备库按照预期执行。
高可用性和故障切换
复制能够帮助应用程序避免MySQL单点失败,一个包含复制的设计良好的故障切换系统能够显著地缩短宕机时间。
复制方式
MySQL支持以下两种数据同步方法:
- 传统复制:也可以称为基于二进制日志文件和位置的复制,在从库中配置复制时,要求指定从主库中获取的二进制日志文件(binlog file)和位置(binlog position),以便从库中的复制线程启动时,能够以指定的二进制日志文件和位置为起点,持续读取主库中的二进制日志,并在从库中应用,从而达到数据同步的目的。
- 基于GTID的复制:GTID(全局事务标识符)是新的事务性复制方法,利用GTID可以自动在主库中寻找需要复制的二进制日志记录,因此不需要关心日志文件或位置,极大地简化了许多常见的复制任务。使用GTID复制可确保主库和从库之间的一致性。。
同步类型
MySQL支持如下4种不同类型的数据同步:
- 异步复制:最早出现的复制技术,MySQL内置支持,不需要额外安装插件。其中,一个实例充当主库,一个或多个其他实例充当从库,与同步复制形成对比。
- 半同步复制:从MySQL 5.5开始支持半同步复制。使用半同步复制时,主库的会话在提交事务之前,会等待至少一个从库返回收到二进制日志的ACK消息(确认接收,并将事务的事件记录到从库的中继日志中)。
- 延迟复制:从MySQL 5.6开始支持,使得从库可以故意滞后于主库至少一段指定的时间,以便在出现误操作时,有时间对误操作的数据进行补救。
- 同步复制:指的是需要保证写操作完全同步到其他数据节点,而不仅仅是二进制日志被其他节点接收。对于需要同步复制的场景,可以使用NDB Cluster,或者其他类似的开源解决方案(虚拟同步,非完全同步),例如Percona XtraDB Cluster(PXC)、MariaDB GaleraCluster(MGC)、MySQL Group Replication(MGR)。
复制格式
MySQL的复制格式(二进制日志格式)可以分为三种,由系统变量binlog_format进行设置:
- 基于statement的复制(Statement Based Replication,SBR):SBR复制的是整个SQL语句的原始文本,日志量较小,但容易出现主从库数据不一致。对于SBR,当执行的某个语句被判定为不安全时,是否允许其执行还取决于事务的隔离级别。
- 基于row的复制(Row Based Replication,RBR):RBR复制的是发生更改的数据行的实际记录(原始语句会被转换为发生变更的行数据记录),日志量较大,但可以保证主从库数据的一致性。
- 混合复制(Mixed Based Replication,MBR):MBR实际上是由MySQL自行判断的,即在不影响数据一致性的情况下,使用SBR;如果可能影响数据一致性,则自动转换为RBR。
复制的基本原理
复制是基于主库(master)二进制日志中写入的关于该数据库的所有更改(更新、删除等)的日志记录来实现的。从库(slave)利用这些二进制日志中的事件记录进行回放来同步数据。
对于复制线程在主从之间新建立连接或重新建立连接的情况,从库会主动向主库请求所需的二进制日志(从库向主库注册连接时,携带了从库自身所需二进制日志的位置信息)。如果复制线程已经在主从之间建立连接,而且从库已经完全接收建立连接时请求的二进制日志内容,后续的增量二进制日志是由主库主动推送给从库的。
MySQL的复制功能用三个线程来实现:一个线程在主库上(Binlog Dump线程),两个线程在从库上(I/O线程和SQL线程)。如图所示:

复制的大致步骤如下:
- 用户提交对数据的修改,然后主库把所有数据库变更写进二进制日志。
- 从库会启动一个工作线程,称为I/O线程。然后在主库上启动一个特殊的Binlog Dump线程,这个线程会读取主库上二进制日志中的事件,它不会对事件进行轮询,如果该线程追赶上了主库,它将进入睡眠状态,直到主库发送信号量通知其有新的事件产生时才会被唤醒。从库的I/O线程跟主库的Binlog Dump线程建立一个普通的客户端连接,备库I/O线程将接收到的事件记录到中继日志中。
- 从库SQL线程读取并解析中继日志中的内容,按照读取的顺序进行回放。
好了,本文到此结束,带大家了解了《【MySQL—高可用】复制》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多数据库知识!

- 上一篇
- idea连接数据库报错serverTimezone设置

- 下一篇
- MySql-数据库语法
-
- 数据库 · MySQL | 5小时前 |
- MySQL无法启动?8个排查方法全解析
- 174浏览 收藏
-
- 数据库 · MySQL | 7小时前 |
- 主键与唯一键区别,如何选主键?
- 166浏览 收藏
-
- 数据库 · MySQL | 9小时前 |
- MySQL多表连接优化技巧与实战策略
- 221浏览 收藏
-
- 数据库 · MySQL | 21小时前 |
- MySQL排序优化与性能提升技巧
- 153浏览 收藏
-
- 数据库 · MySQL | 22小时前 |
- MySQL中WHERE与HAVING的区别详解
- 340浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL排序优化与性能提升技巧
- 368浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL连接池配置与优化方法
- 297浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQLGROUPBY使用技巧与常见问题
- 306浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL缓存优化技巧分享
- 392浏览 收藏
-
- 数据库 · MySQL | 1天前 |
- MySQL安装到D盘教程及路径设置详解
- 279浏览 收藏
-
- 数据库 · MySQL | 2天前 |
- MySQL缓存设置及查询作用解析
- 470浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 511次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 498次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 千音漫语
- 千音漫语,北京熠声科技倾力打造的智能声音创作助手,提供AI配音、音视频翻译、语音识别、声音克隆等强大功能,助力有声书制作、视频创作、教育培训等领域,官网:https://qianyin123.com
- 96次使用
-
- MiniWork
- MiniWork是一款智能高效的AI工具平台,专为提升工作与学习效率而设计。整合文本处理、图像生成、营销策划及运营管理等多元AI工具,提供精准智能解决方案,让复杂工作简单高效。
- 89次使用
-
- NoCode
- NoCode (nocode.cn)是领先的无代码开发平台,通过拖放、AI对话等简单操作,助您快速创建各类应用、网站与管理系统。无需编程知识,轻松实现个人生活、商业经营、企业管理多场景需求,大幅降低开发门槛,高效低成本。
- 107次使用
-
- 达医智影
- 达医智影,阿里巴巴达摩院医疗AI创新力作。全球率先利用平扫CT实现“一扫多筛”,仅一次CT扫描即可高效识别多种癌症、急症及慢病,为疾病早期发现提供智能、精准的AI影像早筛解决方案。
- 98次使用
-
- 智慧芽Eureka
- 智慧芽Eureka,专为技术创新打造的AI Agent平台。深度理解专利、研发、生物医药、材料、科创等复杂场景,通过专家级AI Agent精准执行任务,智能化工作流解放70%生产力,让您专注核心创新。
- 98次使用
-
- golang MySQL实现对数据库表存储获取操作示例
- 2022-12-22 499浏览
-
- 搞一个自娱自乐的博客(二) 架构搭建
- 2023-02-16 244浏览
-
- B-Tree、B+Tree以及B-link Tree
- 2023-01-19 235浏览
-
- mysql面试题
- 2023-01-17 157浏览
-
- MySQL数据表简单查询
- 2023-01-10 101浏览