mysql主从同步简单原理_Mysql主从同步原理
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主从同步原理相关推荐
- mysql主从复制延时性问题_MySQL主从同步延迟原因及解决办法
MySQL主从延迟原因以及解决方案:谈到MySQL数据库主从同步延迟原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作(mysql5.6版本之前),主库对所有DDL和D ...
- mysql主从是同步还是异步_mysql主从同步异步场景的分析
之所以进行这块内容的研究,主要针对之前遇到的两个未解的疑惑: a. 线上有个系统,半同步状态经常从半同步变成异步,然后又马上恢复为半同步,具体原因未明,虽然之前也猜得八九不离十,但还是未完全确定. b ...
- 阿里云mysql主从有延迟怎么办_MySQL主从数据库同步延迟问题解决-阿里云开发者社区...
MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响主服务器服务;③当主服务器出现问题时,可以 ...
- 阿里云mysql主从有延迟怎么办_MySQL主从数据库同步延迟问题解决
MySQL主从数据库同步延迟问题 摘要:MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响主 ...
- mysql主从延迟时间是多少_MySQL主从同步个般是多久的延迟?
原标题:MySQL主从同步个般是多久的延迟? 这次单独调查一下主从延迟的时间.这里说的主从延迟,并不是指"从库更新性能跟不上主库", 而是"一个命令从主库更新完成到从库更 ...
- mysql同步详解_MYSQL 主从同步详解
MYSQL 主从同步详解 作者: 稀土掘金 更新时间:2021-01-22 15:08:29 原文链接 关于MYSQL主从同步 什么是MYSQL的主从复制 主从复制是指将一个服务器作为主服务器,所有的 ...
- mysql主从不同步怎么恢复_mysql主从不同步时,怎么恢复
mysql主从不同步时,怎么恢复 Mysql的主从数据库没有同步 先上Master库: mysql>show processlist; 查看下进程是否Sleep太多.发现很正常. show ...
- mysql 半同步 原理_MySQL半同步复制原理与配置详解
一 .异步.同步和半同步复制概念 异步复制(Asynchronous replication),MySQL默认的复制是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已 ...
- Java解决主从数据库延迟问题_MySQL主从数据库同步延迟问题解决
最近在做MySQL主从数据库同步测试,发现了一些问题,其中主从同步延迟问题是其中之一,下面内容是从网上找到的一些讲解,记录下来以便自己学习: MySQL的主从同步是一个很成熟的架构,优点为:①在从服务 ...
- mysql主从修改系统参数步骤_mysql主从配置的参数配置与步骤_MySQL
mysql主从配置的参数配置与步骤_MySQL 主从配置的步骤: 在主库建立要同步的数据库,建立主库的帐号和修改主备库配置 create database web default character ...
最新文章
- 互联网协议 — BGP 边界网关协议 — Overview
- 阿里PB级Kubernetes日志平台建设实践
- Java代码在计算机中的三个阶段与反射
- YbtOJ#20089-[NOIP2020模拟赛B组Day10]平衡的树【贪心】
- MFC非模态对话框实例
- tf 如何进行svd_Tensorflow快餐教程(6) - 矩阵分解
- 判断随机抽取代码_问卷调查:定量研究中的抽样问题(2)- 非随机抽样介绍
- win7电脑0x000007b蓝屏怎么办
- Rectangle 属性
- 我的世界服务器氪金系统怎么做,[经济]PPRMB销售系统 1.3.1 —— 地图扫码自动到账,氪金系统如此简单[全版本]...
- 基于阿里云的MQTT远程控制
- FPGA与数字信号处理
- 介绍一款在线仿站小工具
- 【SQLite】sqlite 打开扩展名为.DB 文件
- 2020移动apn接入点哪个快_手机资讯:5G 网络和现在 iPhone 使用的 Wi-Fi 有什么区别速度会更快吗...
- write() java_Java Writer write()方法
- [Java] 遍历指定包名下所有的类(支持jar)
- fan类java_(Fan类)(Fan class)
- English语法_不定代词 - other / another
- 高德离线地图开发 java_使用离线地图-创建地图-开发指南-Android 地图SDK | 高德地图API...
热门文章
- Redis:Jedis连接池JedisPool
- JUC原子变量操作类-AtomicLong
- java使用mq教程,Java语言快速实现简单MQ消息队列服务
- 有序表A和B,其元素均按照从小到大升序排列,编写一个算法将它们合并成一个顺序表C,要求C的元素也是从小到大的升序排列。
- CGA建模教程——形状语法(建筑群)
- Java小数向上取整、向下取整、四舍五入取整数
- 优酷iOS插件化页面架构方法
- springboot使用Mybatis-plus3.5.0 数据库取日期数据映射java 类LocalDateTime字段 为null
- macos安装软件总报错,最终解决
- (C语言)使用函数统计指定数字的个数