背景介绍

复制,就是对数据的完整拷贝,说到为什么要复制,首先能想到的是怕数据意外丢失,使得用户蒙受损失。

当完成了数据复制之后,会发现它的优势不止这一点,假如一台机器宕机了,可以启用备份在另一台机器的数据。毕竟宕机的概率很小,闲暇时间还可以让备份机器分担主机器的流量压力。除此之外,当要升级数据库版本时,可以在不停止用户服务的情况下优先升级备用机器,待观测其可用稳定时再将主数据库升级。

但是,也不能总让DBA手动拷贝来完成复制,万一在DBA蹲坑的时候宕机了,在蹲坑期间产生的数据由于没有及时备份,会导致备用数据库的数据缺失,所以还是要设计一套可以自动复制的机制。

设计复制机制

我们暂定被复制的数据库为主库,粘贴出来的为从库,要实现主库到从库的复制,看起来非常简单,只需一个计划任务,定时将主库数据文件复制一份,并传输到从库所在服务器。

但毕竟定时任务不是实时的,万一主库在上次复制的十分钟后发生了故障,被激活的从库用的是最近一次复制的数据,所以会缺失十分钟的数据,后果不堪设想。

还是要实时复制,那可以这样,主库将每次执行完的语句实时发给从库,让从库马上执行,就能保证两边数据一致了。

不太好的是,主库是实时发送数据给从库的,需要等从库执行完毕才能处理下一条语句,严重占用了主库的执行时间,如果从库过多,主库就废了。

还得改成异步才能节省主库的时间,可以将主库执行完的语句存到文件里,让从库来取,这样主库就不用等待从库了。既然是写到文件,速度是很快的,主库完全可以在执行前就将语句写到文件中,达到更高的同步效率。

上述有些问题,从库无法做到跑去主库取数据,只能起一个线程先与主库建立连接,并向主库索要数据,然后主库也起一个线程读取文件内容,并推给从库线程,从库收到语句后就可以马上执行了。

这样效率还是很低,主库的线程要等从库收到语句并执行完毕才能推下一条,如果有多个从库,主库就要开启多个线程长期与各个从库保持通信,占用主库服务器资源,不如从库也创建个文件临时保存主库发来的语句,先存起来再慢慢执行,主库压力小了,从库也放心。

现在从库有了自己的文件做中继,就不用着急了,从库可以再起一个线程,慢慢执行中继文件中的语句,执行完毕之后原文件没有价值了,就可以清理掉,免得占用服务器资源。

到目前为止,最基本的复制机制就设计完了,这种由主库到从库的复制方式就是典型的主从架构,在此基础上可以进行演化,比如从库有很多,主库要为每个从库推送数据,主库的压力会随之增大,又因为主库的职责不仅仅是同步数据,还要忙着读写数据,所以同步数据的事可以找人代替,比如在主库与从库之间再建立一个主库,新建立的主库唯一的职责就是同步数据给从库,这样真正的主库就只需要推送一次数据给新建的主库,其余时间就可以安心读写数据了。

这种演化而来的复制模式叫做多级复制架构,本文到此结束,上述就是三种复制架构中的其中两种,除此之外还有一个“主主”架构,在这里就不再多说了,感兴趣的可以自行了解或关注后续的文章。

欢迎关注公众号【关爱程序员社区】,如果你愿意,让我来帮你关注你不知道又想知道却想不到的知识。

MySQL复制机制原理的更多相关文章

  1. MySQL运行机制原理&架构

    1.MySQL知识普及: MySQL是一个开放源代码的关系数据库管理系统. MySQL架构可以在多种不同场景中应用并发挥良好作用.主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统 ...

  2. 详解mysql复制机制--异步复制,半同步复制和并行复制

    图4 那么如何并行化,并行IO线程,还是并行SQL线程?其实两方面都可以并行,但是并行SQL线程的收益更大,因为SQL线程做的事情更多(解析,执行).并行IO线程,可以将从Master拉取和写Rela ...

  3. Mysql 复制工作原理

    数据库配置的时候,一定要开启二进制日志,如果开始没开启后来再想开启的话,必须重启. 基于日志点的复制 备份数据库工具 ----------------------------------------- ...

  4. MySQL的复制机制

    MySQL的复制机制 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL复制介绍 1>.MySQL复制允许将主实例(master)上的数据同步到一个或多个从实例( ...

  5. 生产环境搭建MySQL复制的教程(转)

    [导读] 网络上有很多关于MySQL复制搭建的步骤和范例,以及手册上有一章完整的篇幅,讲述MySQL复制的原理.搭建步骤.优化等,但依然存在很多刚开始学习MySQL知识或者刚进入DBA行业的朋友咨询, ...

  6. 【3.1】【mysql基本实验】mysql复制(主从复制/异步复制/半同步复制,一主一从)

    关键词:mysql复制(异步复制),mysql异步复制 核心原理: mysql 复制流程原理 一个事务在 mysql异步复制中的流程与生命周期 一个事务,在传统半同步的复制流程 #mysql主从基本实 ...

  7. 一文读懂MySql主从复制机制

    作为一个关系型数据库,MySQL内建地提供数据复制机制,这使得在使用时,可以基于其复制机制实现高可用架构等高级特性,从而使得MySQL无需借助额外的插件或其他工具就具备适用于生产环境.这是MySQL得 ...

  8. MySQL 的主从原理和复制过程简述

    一.MySQL 复制的基本过程如下:1. Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容; 2. Master 接收到来自 Slav ...

  9. MySQL复制原理-加强版

    mysql从3.23开始提供复制功能,复制指将主库的ddl和dml操作通过binlog文件传送到从库上执行,从而保持主库和从库数据同步.mysql支持一台主库同时向多台从库复制,从库同时也可以作为其他 ...

随机推荐

  1. virtual judge(专题一 简单搜索 C)

    Description Farmer John has been informed of the location of a fugitive cow and wants to catch her i ...

  2. Ruby代码块(Block)

    1.什么是代码块 在Ruby中,{}或do...end之间的代码是一个代码块.代码块只能出现在一个方法的后边,它紧接在方法最后一个参数的同一行上,由yield关键字调用.例如: [1,2,3,4,5] ...

  3. SVD实例

    >> X = rand(5,7) X = 0.9797 0.1365 0.6614 0.5828 0.2259 0.2091 0.5678 0.2714 0.0118 0.2844 0.4 ...

  4. [51nod1264]线段相交

    给定两个点: typedef  struct { double  x, y; } Point; Point A1,A2,B1,B2; 首先引入两个实验: a.快速排斥实验 设以线段A1A2和线段B1B ...

  5. Linux 启动顺序

    Linux 启动顺序:1. BIOS自检2. 运行系统内核并检测硬件3. 运行系统的第一个进程init4. init读取系统引导配置文件/etc/inittab中的信息进行初始化            ...

  6. C# 开发网页的打印版

    在项目中,有一个需求时是需要打印产品页面.但是打印出来的版本和网页上的版本不太一致,有些图片不需要,网页上以tab选项卡显示的内容,都需要在打印页面中看到..等等 CSS针对这种需求,引入了一个@me ...

  7. 4.Windows应急响应:勒索病毒

    0x00 前言 勒索病毒,是一种新型电脑病毒,主要以邮件.程序木马.网页挂马的形式进行传播.该病毒性质恶劣. 危害极大,一旦感染将给用户带来无法估量的损失.这种病毒利用各种加密算法对文件进行加密,被感 ...

  8. div设置滚动条内容任然显示不全

    <div style="overflow:scroll;height:100%"></div> 注意:高度需设置为100%,不然内容显示不全

  9. superset 错误解决

    访问superset localhost:8088   securety->list Role 报错 xxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxx ...

  10. 字符串中去除多余的空格保留一个(MS SQL Server)

    大约2年前,写过一篇<字符串中去除多余的空格保留一个(C#)>https://www.cnblogs.com/insus/p/7954151.html 今天,Insus.NET使用MS S ...