mysql的主从同步给构建大型系统带来了无限的可能性,接下来我们就简单介绍一下mysql的主动同步的基本原理以及实现方式。

什么是主从同步

在mysql集群这个体系中,mysql会单独拿出一台机器作为主机器master,我们所有的insert,update,delete操作全部都在这台master服务器的库上,然后其他的机器全部作为这台机去的从节点slave,从节点的mysql会去master机器上获取最近一段时间的操作(通常很短暂),然后同步更新自己的数据,这样就达到了主从同步的操作。

这样的不同于传统的单机操作模式,带来的好处就是可以实现读写分离,集群扩展,数据的分区容错和高可用,数据备份等。

主从同步实现方式

那么,mysql是通过怎样的一种方式来实现主从同步的呢?其实很简单,在mysql内部,会有一个特殊的文件来记录着master上发生的一切,这个文件被叫做binary-log,俗称bin-log,这个文件所记录的操作被成为主从同步事件,每一个事件代表着一系列的intert,update,delete等操作,总体上,主从同步事件又大致分为三种:statement 即master上执行的所有sql语句会被完整的记录到bin-log中

row 即每一条记录的变化情况会被记录到bin-log中

mix 即同时混合前面的两种事件,结合使用

当slave机器连接到master机器上时,master机器会开启一个叫做bin-dump的线程来管理这一个连接,当master的bin-log有改变的时候,dump线程会通知slave机器,同时将自己的更新内容同步给slave机器节点中。所以,一主多从下,master会有多个dump线程来维护多个slave服务器

同时,slave机器自身也会开启两个线程,一个叫做io线程,一个叫做sql线程,具体操作过程如下:io线程:接受master返回的bin-log中的更新内容,记录到本地的一个叫做中继日志中(relay.log),当同步完成后,它会休眠,直到下一次master有更新时,通知它。

sql线程:从中继日志中获取最新的改变内容,然后在本地同步执行这些操作。这里有一个限制:master上可能有许多不影响的操作,它会并行执行,但是slave在同步这些操作时,只会串行化的执行这些操作。

通过在master上执行命令可以查看当前master的dump线程:

当然,在slave上执行命令也可以查看自己的io线程和sql线程:

从sql线程中我们可以看到确实是从一个叫relay.log中获取同步操作的。

扩展slave节点

通常一个业务最开始都是从单机逐渐到集群的,所以mysql也是一样,我们很少有一开始就设置主从架构的应用,那么,如何在一个已有的服务器中添加从机器,或者从某一个已经有主从架构的服务商扩展一个新的slave呢?其实大致会有如下的几种方式:冷拷贝方式:即停止掉master节点,先进行数据复制,然后再启动,显然,这不是一个好的方案。

热拷贝方式:如果你是使用的myisam的存储引擎,那么你可以使用mysqlhotcopy程序来实现拷贝操作。

使用mysqldump方式:此时如果我们没有用myisam引擎,那么我们就可以通过dump来实现不停服务的情况下进行数据的拷贝,它的大致流程有如下三步:

1.锁表,我们知道,如果想保证数据一致,那么在进行复制时,锁表就是必须的一个步骤。

2.创建dump线程,执行数据同步操作。

3.释放表。

5.7新增的并行复制

从前面的步骤我们可以分析出一个结论,就是复制的过程必然会导致大量延迟(这也是确实存在的),所以mysql从5.6开始,就在全力解决这个棘手的问题,5.6之后,mysql提出了一个并行复制的概念,即可以同时进行数据的备份,用于减少延迟,大致上来说,5.6的mysql是基于schema的并行复制策略,所以这种场景下其实是有一个弊端的,我们知道,mysql中,每一个schema可以理解为一个库,所以基于schema就意味着可以实现多个库的并行复制,但是我们平常大多数时候,一个项目通常只会有一个库,所以单库下,我们并不能使用mysql的并行复制功能。

而mysql 5.7开始,从新引入一个叫gtids的概念,即全局事务id,所以说这一个版本开始,就是基于事务的复制了,这样就解决了单库的问题。

mysql主从同步简单原理_Mysql主从同步原理相关推荐

  1. mysql主从复制延时性问题_MySQL主从同步延迟原因及解决办法

    MySQL主从延迟原因以及解决方案:谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作(mysql5.6版本之前),主库对所有DDL和D ...

  2. mysql主从是同步还是异步_mysql主从同步异步场景的分析

    之所以进行这块内容的研究,主要针对之前遇到的两个未解的疑惑: a. 线上有个系统,半同步状态经常从半同步变成异步,然后又马上恢复为半同步,具体原因未明,虽然之前也猜得八九不离十,但还是未完全确定. b ...

  3. 阿里云mysql主从有延迟怎么办_MySQL主从数据库同步延迟问题解决-阿里云开发者社区...

    MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响主服务器服务;③当主服务器出现问题时,可以 ...

  4. 阿里云mysql主从有延迟怎么办_MySQL主从数据库同步延迟问题解决

    MySQL主从数据库同步延迟问题 摘要:MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响主 ...

  5. mysql主从延迟时间是多少_MySQL主从同步个般是多久的延迟?

    原标题:MySQL主从同步个般是多久的延迟? 这次单独调查一下主从延迟的时间.这里说的主从延迟,并不是指"从库更新性能跟不上主库", 而是"一个命令从主库更新完成到从库更 ...

  6. mysql同步详解_MYSQL 主从同步详解

    MYSQL 主从同步详解 作者: 稀土掘金 更新时间:2021-01-22 15:08:29 原文链接 关于MYSQL主从同步 什么是MYSQL的主从复制 主从复制是指将一个服务器作为主服务器,所有的 ...

  7. mysql主从不同步怎么恢复_mysql主从不同步时,怎么恢复

    mysql主从不同步时,怎么恢复 Mysql的主从数据库没有同步 先上Master库: mysql>show processlist;   查看下进程是否Sleep太多.发现很正常. show  ...

  8. mysql 半同步 原理_MySQL半同步复制原理与配置详解

    一 .异步.同步和半同步复制概念 异步复制(Asynchronous replication),MySQL默认的复制是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已 ...

  9. Java解决主从数据库延迟问题_MySQL主从数据库同步延迟问题解决

    最近在做MySQL主从数据库同步测试,发现了一些问题,其中主从同步延迟问题是其中之一,下面内容是从网上找到的一些讲解,记录下来以便自己学习: MySQL的主从同步是一个很成熟的架构,优点为:①在从服务 ...

  10. mysql主从修改系统参数步骤_mysql主从配置的参数配置与步骤_MySQL

    mysql主从配置的参数配置与步骤_MySQL 主从配置的步骤: 在主库建立要同步的数据库,建立主库的帐号和修改主备库配置 create database web default character ...

最新文章

  1. 互联网协议 — BGP 边界网关协议 — Overview
  2. 阿里PB级Kubernetes日志平台建设实践
  3. Java代码在计算机中的三个阶段与反射
  4. YbtOJ#20089-[NOIP2020模拟赛B组Day10]平衡的树【贪心】
  5. MFC非模态对话框实例
  6. tf 如何进行svd_Tensorflow快餐教程(6) - 矩阵分解
  7. 判断随机抽取代码_问卷调查:定量研究中的抽样问题(2)- 非随机抽样介绍
  8. win7电脑0x000007b蓝屏怎么办
  9. Rectangle 属性
  10. 我的世界服务器氪金系统怎么做,[经济]PPRMB销售系统 1.3.1 —— 地图扫码自动到账,氪金系统如此简单[全版本]...
  11. 基于阿里云的MQTT远程控制
  12. FPGA与数字信号处理
  13. 介绍一款在线仿站小工具
  14. 【SQLite】sqlite 打开扩展名为.DB 文件
  15. 2020移动apn接入点哪个快_手机资讯:5G 网络和现在 iPhone 使用的 Wi-Fi 有什么区别速度会更快吗...
  16. write() java_Java Writer write()方法
  17. [Java] 遍历指定包名下所有的类(支持jar)
  18. fan类java_(Fan类)(Fan class)
  19. English语法_不定代词 - other / another
  20. 高德离线地图开发 java_使用离线地图-创建地图-开发指南-Android 地图SDK | 高德地图API...

热门文章

  1. Redis:Jedis连接池JedisPool
  2. JUC原子变量操作类-AtomicLong
  3. java使用mq教程,Java语言快速实现简单MQ消息队列服务
  4. 有序表A和B,其元素均按照从小到大升序排列,编写一个算法将它们合并成一个顺序表C,要求C的元素也是从小到大的升序排列。
  5. CGA建模教程——形状语法(建筑群)
  6. Java小数向上取整、向下取整、四舍五入取整数
  7. 优酷iOS插件化页面架构方法
  8. springboot使用Mybatis-plus3.5.0 数据库取日期数据映射java 类LocalDateTime字段 为null
  9. macos安装软件总报错,最终解决
  10. (C语言)使用函数统计指定数字的个数