mysql实例怎么复制_Mysql实例MySQL数据库复制概论

《Mysql实例MySQL数据库复制概论》要点:

本文介绍了Mysql实例MySQL数据库复制概论,希望对您有用。如果有疑问,可以联系我们。

导读:每当我们讨论一项(新的)领域技术的时候,最好的方式通常是首先抛出一些问题,这些问题大致分为三类:诶?这项技术又是什么玩意(What)?...

每当我们讨论一项(新的)领域技术的时候,最好的方式通常是首先抛出一些问题,这些问题大致分为三类:诶?这项技术又是什么玩意(What)?这项技术为什么会存在?我们已经有那么多解决方案(Method)了,我们问什么要用它(Why)?如果这项技术那么好且我们正好有场景可以用到这项技术,且能使我们的系统得到很乐观的优化,那么我们怎么用呢(How)?大概已经有同学觉得这些问题很熟悉了,是的,这就是黄金全法则提出的三个问题,对于每种新鲜事物我们首先基于这三个问题去了解,更有利于弄清楚事情的本质,端正态度去了解,而不是因为新,因为大家都说好,才要去了解…….说了那么多前奏,我们可以开始了,今天我们就带着黄金圈法则提出的三个问题去看看MySQL数据库复制这项领域技术,然后再结合实际应用扩展一些问题,本文也仅仅是结合自己了解的皮毛以抛砖引玉的态度和大家一起分享.

MYSQL实例WHAT?

MYSQL实例MySQL复制使得一台Mysql数据库服务器的数据被拷贝到其他一台或者多台数据库服务器,前者通常被叫做Master,后者通常被叫做Slave.

MYSQL实例

2017100220164952900.png

MYSQL实例MySQL复制示意图

MYSQL实例复制的结果是集群(Cluster)中的所有数据库服务器得到的数据理论上都是一样的,都是同一份数据,只是有多个copy.MySQL默认内建的复制策略是异步的,基于不同的配置,Slave不一定要一直和Master保持连接不断的复制或等待复制,我们指定复制所有的数据库,一部分数据库,甚至是某个数据库的某部分的表.

MYSQL实例MySQL复制支持多种不同的复制策略,包括同步、半同步、异步和延迟策略等.

MYSQL实例同步策略:Master要等待所有Slave应答之后才会提交(MySql对DB操作的提交通常是先对操作事件进行二进制日志文件写入然后再进行提交).

MYSQL实例半同步策略:Master等待至少一个Slave应答就可以提交.

MYSQL实例异步策略:Master不需要等待Slave应答就可以提交.

MYSQL实例延迟策略:Slave要至少落后Master指定的时间.

MYSQL实例MySQL复制同时支持多种不同的复制模式:

MYSQL实例基于语句的复制,Statement Based Replication(SBR).

MYSQL实例基于行的复制Row Based Replication(RBR).

MYSQL实例混合复制(Mixed).

MYSQL实例WHY?

MYSQL实例这个问题其实也就是MySQL复制有什么好处,我们可以将复制的好处归结于下面几类:

MYSQL实例性能方面:MySQL复制是一种Scale-out方案,也即“水平扩展”,将原来的单点负载扩散到多台Slave机器中去,从而提高总体的服务性能.在这种方式下,所有的写操作,当然包括UPDATE操作,都要发生在Master服务器上.读操作发生在一台或者多台Slave机器上.这种模型可以在一定程度上提高总体的服务性能,Master服务器专注于写和更新操作,Slave服务器专注于读操作,我们同时可以通过增加Slave服务器的数量来提高读服务的性能.

MYSQL实例防腐化:由于数据被复制到了Slave,Slave可以暂停复制进程,进行数据备份,因此可以防止数据腐化.

MYSQL实例故障恢复:同时多台Slave如果有一台Slave挂掉之后我们还可以从其他Slave读取,如果配置了主从切换的话,当Master挂掉之后我们还可以选择一台Slave作为Master继续提供写服务,这大大增加了应用的可靠性.

MYSQL实例数据分析:实时数据可以存储在Master,而数据分析可以从Slave读取,这样不会影响Master的性能.

MYSQL实例HOW?

MYSQL实例这里我们只介绍一下MySQL的复制是如何工作的,至于配置,网上也有很多相关的介绍,读者具体应用的时候可以再去查阅.我们拿最常用的基于二进制文件的复制来看看.

MYSQL实例

2017100220164940056.jpg

MYSQL实例MySQL复制工作示意图

MYSQL实例MySQL的复制过程大概如下:

MYSQL实例首先,主库在每次准备提交事务完成数据更新操作之前都会将数据更改操作记录到二进制日志中,这些日志是以二进制的方式记录数据更改的事件.值得一提的是二进制日志中记录的顺序实际上是事务的提交顺序,而非SQL执行语句的顺序.在记录二进制日志之后,主库会告诉存储引擎事务可以提交了.

MYSQL实例然后,备库会启动一个IO线程,之所以叫做IO线程是因为这个线程专门做IO相关的工作,包括和主库建立连接,然后在主库上启动一个特殊的二进制转储线程,这个转储线程会不断的读取二进制日志中的事件,发送给备库的IO线程,备库的IO线程会将事件记录到中继日志中.

MYSQL实例备库会有一个叫做SQL的线程被开启,这个线程做的事情是读取中继日志中的DB操作事件在备库执行,从而实现数据更新.

MYSQL实例总的来说,在发生复制的主库服务器和备库服务器中,一共有三个线程在工作.

MYSQL实例上面我们已经大概了解的什么是复制?为什么要复制?如何复制?这三个问题了,接下来我们基于上面的介绍,提出一些实际应用可能会发生的问题来思考如何解决.博主自问自答的方式-.-

MYSQL实例问答环节

MYSQL实例问题一:通过复制模型虽然读能力可以通过扩展slave机器来达到提高,而写能力却不能,如果写达到瓶颈我们应该怎么做呢?

MYSQL实例答:我们首先会得出结论,这种复制模型对于写少读多型应用是非常有优势的,其次,当遇到这种问题的时候我们可以对数据库进行分库操作,所谓分库,就是将业务相关性比较大的表放在同一个数据库中,例如之前数据库有A,B,C,D四张表,A表和B表关系比较大,而C表和D表关系比较大,这样我们把C表和D表分离出去成为一个单独的数据库,通过这种方式,我们可以将原有的单点写变成双点写或多点些,从而降低原有主库的写负载.

MYSQL实例问题二:因为复制是有延迟的,肯定会发生主库写了,但是从库还没有读到的情况,遇到这种问题怎么办?

MYSQL实例答:MySQL支持不同的复制策略,基于不同的复制策略达到的效果也是不一样的,如果是异步复制,MySQL不能保证从库立马能够读到主库实时写入的数据,这个时候我们要权衡选择不同复制策略的利弊来进行取舍.所谓利弊,就是我们是否对从库的读有那么高的实时性要求,如果真的有,我们可以考虑使用同步复制策略,但是这种策略相比于异步复制策略会大大降低主库的响应时间和性能.我们是否可以在应用的设计层面去避开这个问题?

MYSQL实例问题三:复制的不同模式有什么优缺点?我们如何选择?

MYSQL实例答:基于语句的复制实际上是把主库上执行的SQL在从库上重新执行一遍,这么做的好处是实现起来简单,当前也有缺点,比如我们SQL里面使用了NOW(),当同一条SQL在从库中执行的时候显然和在主库中执行的结果是不一样的,注入此类问题可以类推.其次问题就是这种复制必须是串行的,为了保证串行执行,就需要更多的锁.

MYSQL实例基于行的复制的时候二进制日志中记录的实际上是数据本身,这样从库可以得到正确的数据,这种方式缺点很明显,数据必须要存储在二进制日志文件中,这无疑增加的二进制日志文件的大小,同时增加的IO线程的负载和网络带宽消耗.而相比于基于语句的复制还有一个优点就是基于行的复制无需重放查询,省去了很多性能消耗.

MYSQL实例无论哪种复制模式都不是完美的,日志如何选择,这个问题可以在理解他们的优缺点之后进行权衡.

MYSQL实例问题四:复制的工作过程只有三个线程来完成,对于Master来说,写是并发的,也就出现了一个IO线程要把所有并发的数据变更事件记录,这个IO线程会不会累死?当一个Master对应多个Slave的时候,其实在Master中会唤起多个IO线程,这无疑会增加Master的资源开销,如果出现事件堆积,也就是事件太多,来不及及时发送出去怎么办?另外就是Slave那边的IO线程和SQL线程也会有对应主库并发数据变更事件,而Slave方单个线程处理的问题,这个时候Slave线程会不会累死?

MYSQL实例答:上面的问题确实会发生,上面第一个问题和第二个问题其实是写负载的问题,当事件堆积太多,从库时延就会变大,Slave单SQL线程问题据说有参数可以开启并行操作,这个大家可以确认一下.

MYSQL实例问题五:针对复制工作过程可能会出现的问题,主库写完二进制日志文件同时都会保存二进制日志的偏移量,但是当断电的时候,二进制日志文件没有刷新到磁盘,主库重新启动之后,从库尝试读该偏移量的二进制日志,会出现读不到的情况,这个问题应该怎么解决?

MYSQL实例答:首先如果开启了sync_binlog选项,对于innodb同时设置innodb_flush_log_at_trx_commot=1,则可以保证二进制日志文件会被写入磁盘,但MyISAM引擎可能会导致数据损坏.如果没有开启这个选项,则可以通过制定从库的二进制偏移量为下一个二进制日志文件的开头,但是不能解决事件丢失问题.

MYSQL实例问题六:从库在非计划的关闭或重启时,回去读master.info文件去找上次停止复制的位置,这同样会有一个问题,如果master.info不正确,就会导致复制数据不一致的情况,遇到这个问题怎么办?

MYSQL实例答:这个问题可以通过两种方式解决,一是控制master.info在从库非计划关闭或重启的时候让master.info能够同步到磁盘,这样下次启动的时候就不会读取错误的信息,这有助于减少错误的发生概率.另外想要找到正确的复制位置是困难的,我们也可以选择忽略错误.

MYSQL实例……

MYSQL实例其实问题也是蛮多的,这里就不再继续提问了,包括如果主库二进制日志文件损坏怎么办?从库中继日志文件损坏怎么办?因为每个环节都不是百分之一百可靠的,因此我们必须对可能遇到的问题提出假设,思考解决方案.本文通过黄金圈法则提出的三个问题来认识MySQL复制,通过自问自答的形式来对主体的一些可能存在的应用问题进行讨论,对于复制方面还存在很多的实际应用问题,这里只是抛砖引玉,还请数据库大牛们多多指教.

来源:http://my.oschina.net/andylucc/blog/631591

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

app inventor离线版_百度要哭了!今日头条出了搜索引擎了,还做了APP

今天小编为大家送上几条新闻了:1 微软给Edge浏览器添加离线小游戏谷歌浏览器在不联网的情况下,会有一个小恐龙跳一跳的游戏,而最近换上chromium内核的edge,也添加了自己的离线小游戏。这是一款冲浪游戏,非常类似于微软…

打车业务下单高并发解决方案

简介: 打车业务下单高并发解决方案前言 在技术领域有一条准则,即不存在银弹技术。在实际工作中,通常无法通过几项简单的技术组合就解决实际业务中各种场景下的复杂问题。虽然追求架构的简单简洁也是架构师的目标之一。但必须认识到架构的简单…

Serverless 时代 DevOps 的最佳打开方式

简介: 传统软件开发过程中,开发和运维是极其分裂的两个环节,运维人员不关心代码是怎样运作的,开发人员也不知道代码是如何运行的。 作者 | 许成铭(竞霄) 来源 | 阿里巴巴云原生公众号 DevOps 简析 传统软…

2020 q5l使用手册电子版_关于2020下半年自考本科毕业生论文预答辩题目查询的通知...

一、对象:2020下半年获论文预答辩资格毕业生(名单见附件1)二、查询方法:请登录以下网址: 输入个人准考证和姓名,查询论文预答辩题目。三、相关要求1. 请将《自学考试本科毕业论文预答辩记录表》(见附件2)中个人相关信息以及预答辩…

现实版“奇异博士”?原来是这款神秘的“数学黑盒”

简介: 现实版“奇异博士”?原来是这款神秘的“数学黑盒”供稿团队:阿里云市场部在漫威电影《复联3》中,奇异博士预测到未来有1400多万种可能,而胜利却只有一种,这唯一的最优解成为他们战斗的希望。只可惜&a…

如何在Spring生态中玩转RocketMQ?

简介: RocketMQ作为业务消息的首选,在消息和流处理领域被广泛应用。而微服务生态Spring框架也是业务开发中最受欢迎的框架,两者的完美契合使得RocketMQ成为Spring Messaging实现中最受欢迎的消息实现。本文展示了5种在Spring生态中文玩转Rock…

enum 有什么好处_林卡尔|先买地板后装修的三大好处

【中华地板网】现在很多装饰公司和设计师, 提倡的装修新模式——“先定地板后装修”。 后装修并不是买完地板后再开工, 而是在开工之前, 先把地板风格、颜色、尺寸、价位定下, 然后让设计师根据地板进行其他设计。 那么这样做究竟…

华为推出业界首个分布式云原生产品:华为云UCS,持续创新,深耕数字化

华为面向ICT产业的全球年度旗舰活动——华为全联接2021拉开序幕。华为轮值董事长徐直军进行了“以持续创新加快数字化发展”的大会主题演讲。 本次大会围绕“深耕数字化”主题,探讨如何深入业务场景,把数字技术与行业知识深度结合,解决核心业…

Flink 必知必会经典课程四:Fault-tolerance in Flink

简介: 本文由 Apache Flink PMC , 阿里巴巴高级技术专家李钰分享,主要从有状态的流计算、全局一致性快照 、Flink的容错机制、Flink的状态管理 四个方面介绍 Flink 的容错机制原理。 作者 | 李钰 分享人:本文由 Apache Flink PMC , 阿里巴巴…

用云原生的思维践行云原生,华为云深耕数字化,一切皆服务

[中国,深圳,2021年9月23日] 华为全联接2021于9月23日开幕。华为轮值董事长徐直军进行了“以持续创新加快数字化发展”的主题演讲,发布业界首个分布式云原生产品——华为云UCS,即 “无处不在的云原生服务”。华为高级副总裁、华为云…

白苹果了怎么办_苹果手机出现白苹果、死机、不断重启怎么办?

小伙伴们的苹果设备是否出现过白苹果、不断重启、更新失败、卡机死机、进入了恢复模式等情况呢?小编自己的iPhoneXR就遇到过,不知道怎么操作的就进入了恢复模式,有时候手机卡机需要强制重启,遇到问题就想去外面的修理店解决一下,…

Knative 多容器支持介绍

简介: 微服务和容器化带来了将应用程序分解成可重复使用的小型单元的诉求,这些单元通常作为单独的进程运行,或者在单独的容器运行。 Kubernetes的Pod模型允许用户创建一个部署单元,该单元可以打包多个容器作为应用程序的单个实例。…

GitHub Action + ACK:云原生 DevOps 落地利

简介: 据信通院《中国 DevOps 现状调查报告(2020年)》显示,63% 的企业已经实践落地 DevOps,采用持续交付流水线打通开发、测试、部署和运维多个环节。但是依然有 20% 的企业反馈实践 DevOps 复杂,自建 Jenk…

win7硬盘安装工具_如何重装电脑安装Win7 系统?最简单,最便捷的办法,值得收藏...

没有U盘、没有光盘怎么安装Win7系统?最简单、最方便的就是用硬盘安装了。在保证能进入系统的前提下,本地硬盘安装Win7系统,能够让你快速体验新的Win7系统。一、安装前准备保证能够正常进入系统;下载Win7系统:64位&…

网络架构优化--云企业网典型场景分析for客户

简介: 网络架构优化--云企业网典型场景分析for客户1. 背景描述 客户从传统的高速通道迁移到云企业网,加入云企业网的VPC,VBR默认全通,但是实际业务场景需要更严格的策略做选择性放通。此外,由于测试账号没有实际专线和…

五个问题,三大策略,手把手教你定制App性能监控方案

作者:友盟U-APM团队 Why? 为什么要做应用性能监控? 首先,我们要知道应用性能监控具体指什么?以及目的: 监控是一套完整的“监视报警”的系统。对于像我们这样的App开发者来说,应用性能监控是衡量App的第…

c++ 打印条码_金蝶盘点机PDA仓库条码管理之——外购入库扫码开单操作

优势点:收到供应商送货后,仓管员手持盘点机PDA现场将需要入库的商品按顺序扫描一遍,即可自动生成电脑软件金蝶里的【外购入库单】,避免仓管员往返电脑费时费事,和人工手工电脑录单效率低容易出错的问题,从而…

我在架构设计和代码开发中的一些常用原则

简介: 在日常的开发和设计过程中,大家对技术设计上的一些问题往往会面临很多的选择,不同的人会有不同的选择。本文介绍的就是我在工作中遇到的一些问题而总结和使用到的一些常用原则。 不管我一生中取得了多大的成功,其主要原因都…

坚持自主创新,凌波微步完成数千万A轮融资,加速半导体产业

随着5G、互联网、大数据、人工智能以及汽车电子等新技术、新产品的广泛应用,半导体产业已成为国民经济的基础性支撑产业。它是支撑经济社会发展,保障国家安全的战略性、基础性和先导性产业,其发展程度是衡量一个国家科技发展水平的核心指标之…

当程序员具备了抽象思维

简介: 若想捉大鱼,就得潜入深渊。深渊里的鱼更有力,也更纯净。硕大而抽象,且非常美丽。 作者:张建飞 若想捉大鱼,就得潜入深渊。深渊里的鱼更有力,也更纯净。硕大而抽象,且非常美丽…