云数据库高可用—— Series1:MySQL主从复制原理背景
1 引言
高可用是系统架构设计中必须考虑的因素之一,主要目标是消除基础架构中的单点故障,通常表示为一个百分比,表示在给定时间段内特定系统或组件的正常运行时间,其中100%表示系统永不失效。而任何的单机系统因受限于软硬件的限制,如硬件损坏、操作系统崩溃、软件BUG、业务压力过大等原因,都不可能保证系统100%可用。一旦出现此类问题,如何能快速恢复用户业务,将影响程度减至最低,降低故障RTO(Recovery Time Objective,恢复时间目标)成为我们所要考虑的问题。
对于数据库系统来说,比较通用的解决方案是将单机程序部署在多台主机上,组成一个集群共同对外提供服务。在MySQL中,最常见的一种部署方式为主从复制,这种部署方式一方面满足了故障恢复的场景,又能够在一定程序上分担主库的压力,做到了业务的读写分离。相较于Oracle的RAC(real application clusters,实时应用集群)来讲,一不需要共享存储,二不需要内存同步,也无需VIP(Virtual IP Address,虚拟IP地址)。因此MySQL的主从部署更为便捷,实现原理也简单。本文将对MySQL主从复制的实现原理进行介绍。
2 一主一从复制实现原理
在数据库实现技术中,最基本的、必须要满足的一个特性便是ACID,即事务的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。为了实现ACID,MySQL引入了Binlog(二进制日志),数据库中所有的DML、DDL语句都将记录在Binlog当中。如用户在主库上执行了一条update语句,那么在Binlog中便会记录这条update语句,这样就可以使用Binlog来进行实例间的数据同步,Binlog也成为MySQL主从复制的实现基础,能够达到增量数据同步的目的,具体实现原理如下图所示。
图1:MySQL一主一从复制实现原理图
- 主库所有的DML、DDL操作语句记录到Binlog日志中。
- 从库中的IO线程会实时捕获主库中Binlog的变化内容,并写到从库的中继日志Relay log里。Relay log会持久化到本地文件中。
- 从库中的SQL线程负责从Relay log日志里取出Binlog内容,并把所有的语句按先后顺序在从库中执行一遍,这样就实现了主从间数据的一致性。
以上便是MySQL主从库实现增量数据同步的步骤和原理。
3 一主一从部署
在实际部署过程中,需要先做全量数据的同步,保证从库中存在与主库相同的基础数据,然后再进行增量同步。一般使用数据库全库的备份恢复来做主从间的全量同步,即先在主库上做一次全量备份,然后把备份传到从库中进行全量恢复。这里会有一个问题,主库不会一直是静止状态,数据备份和恢复需要一定的时间,这个时间长短完全取决于数据量的大小以及主从间的传输带宽,从库执行完全量恢复后可能已经落后主库一段时间,这段时间的增量数据就需要Binlog来追。所以在从库上需要执行一个change master的命令来告诉从库需要从哪个位置来同步主库的Binlog日志,同时从库上会启动IO线程和SQL线程,IO线程从指定位置开始读取Binlog,SQL线程用来回放日志。当从库追平主库时,便完成了主从部署和搭建。
以上便是MySQL基于Binlog进行主从复制的相关内容,不过这种机制是100%可靠的么?会不会有例外情况?读者可思考一下,下期我们将继续进行介绍。
作者:张西来
阿里云智能GTS-SRE团队技术服务经理
曾就职于某国产数据库厂商,有10多年数据库技术支持工作经验,精通多款数据库产品,为国内多个大中银行核心数据库提供技术支持。目前就职于阿里云智能GTS-SRE团队,负责云数据库的高效运维和管理工作。
我们是阿里云智能全球技术服务-SRE团队,我们致力成为一个以技术为基础、面向服务、保障业务系统高可用的工程师团队;提供专业、体系化的SRE服务,帮助广大客户更好地使用云、基于云构建更加稳定可靠的业务系统,提升业务稳定性。我们期望能够分享更多帮助企业客户上云、用好云,让客户云上业务运行更加稳定可靠的技术,您可用钉钉扫描下方二维码,加入阿里云SRE技术学院钉钉圈子,和更多云上人交流关于云平台的那些事。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
从 2018 年 Nacos 开源说起
2018 年夏天 国内微服务开源 领域,迎来了一位新成员。此后,在构建微服务注册中心和配置中心的过程中,国内开发者多了一个可信赖的选项。 Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台(官方网站),它凝聚了阿里巴巴十多年来在超大规模注册和配置上的最佳实践,可以用在微服务场景作为服务注册中心、配置中心等核心场景中,和阿里的其他微服务开源项目一样,Nacos 也是始于阿里,成长于社区的典型。 为什么要开源 Nacos ? 在大规模服务发现和服务治理领域,现有的开源解决方案并非已经非常完美,阿里巴巴从 IOE 集中式应用架构升级为互联网分布式服务化架构的演进过程中,积累了大量有关服务注册和服务配置的实践经验,而这些经验是可以在各个行业大规模复用。除此之外,更重要的是,希望和社区开发者共同发展,让 Na
- 下一篇
在DB-Engines的排名不高,ClickHouse还值得关注吗?
我:"老大,最近ClickHouse很火啊,咱不试试吗??" 中台架构师:"哦? CK吗? 那是个啥玩意呀??" 我:"是CH!!一款OLAP数据库!!" 中台架构师:"是数据库啊!!DB-Engines排名多少?? " 我:"。。。。。。" 上述又是我的一段亲身经历。 最近有朋友问我:"你是基于什么根据,如何判断出ClickHouse要火的呢?" 我回答道:"其实很简单啊,你看看周边的人,都是在怎么学ClickHouse,不就明白了吗?"接着,我拿出手机,给他看了下面这张照片。 "你看,人家妹子在地铁上,还在坚持学习ClickHouse!!! 你再不学,就要落伍了!!!"我的朋友在看过这张照片之后,意味深长的点了点头。 在搞定了我的朋友之后,现在言归正传,聊一聊排行榜的问题。 在我们的生活中,排行榜可谓是无处不在,因为人的天性就喜欢比较,而排行榜则是一个最为简单易用的比较工具。有句笑谈不是这么说的嘛: "什么是幸福感? 幸福感就是经过比较以后,发现你比别人过的好" 玩笑归玩笑,排行比较确实是有用处的,比如: 使用比较之前中台架构师:"我来介绍一下,这位新招的架构师非常厉害,他对中台的...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作