MySQL主从同步的概述_MySQL主从同步原理介绍
概述
Mysql的Replication(复制)是一个异步的复制过程,从一个 Mysql instance(我们称之为 Master)复制到另一个Mysql instance(我们称之 Slave)。在 Master 与 Slave之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在Master端。
主从同步需求
要实现 MySQL 的 Replication ,首先必须打开 Master 端的BinaryLog(mysql-bin.xxxxxx)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。打开 MySQL 的 Binary Log 可以通过在启动 MySQL Server 的过程中使用“—log-bin” 参数选项,或者在 my.cnf 配置文件中的 mysqld 参数组([mysqld]标识后的参数部分)增加“log-bin” 参数项。
主从同步过程
MySQL 复制的基本过程如下:
1.Slave上面的IO线程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
2.Master接收到来自Slave的IO线程的请求后,通过负责复制的IO线程根据请求信息读取指定日志指定位置之后的日志信息,返回给Slave端的 IO线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在Master端的Binary Log文件的名称以及在Binary Log中的位置;
3.Slave的IO线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的RelayLog文件(mysql-relay-bin.xxxxxx)的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”。
4.Slave的SQL线程检测到Relay Log中新增加了内容后,会马上解析该Log文件中的内容成为在Master 端真实执行时候的那些可执行的Query语句,并在自身执行这些Query。这样,实际上就是在Master端和Slave端执行了同样的Query,所以两端的数据是完全一样的。
实际上,在老版本中,MySQL 的复制实现在 Slave 端并不是由 SQL 线程和 IO线程这两个线程共同协作而完成的,而是由单独的一个线程来完成所有的工作。但是 MySQL的工程师们很快发现,这样做存在很大的风险和性能问题,主要如下:
1.首先,如果通过一个单一的线程来独立实现这个工作的话,就使复制 Master 端的,BinaryLog日志,以及解析这些日志,然后再在自身执行的这个过程成为一个串行的过程,性能自然会受到较大的限制,这种架构下的Replication 的延迟自然就比较长了。
3.其次,Slave 端的这个复制线程从 Master 端获取 Binary Log 过来之后,需要接着解析这些内容,还原成Master 端所执行的原始 Query,然后在自身执行。在这个过程中,Master端很可能又已经产生了大量的变化并生成了大量的Binary Log 信息。如果在这个阶段 Master端的存储系统出现了无法修复的故障,那么在这个阶段所产生的所有变更都将永远的丢失,无法再找回来。这种潜在风险在Slave端压力比较大的时候尤其突出,因为如果 Slave压力比较大,解析日志以及应用这些日志所花费的时间自然就会更长一些,可能丢失的数据也就会更多。
所以,在后期的改造中,新版本的 MySQL 为了尽量减小这个风险,并提高复制的性能,将 Slave端的复制改为两个线程来完成,也就是前面所提到的 SQL 线程和 IO线程。最早提出这个改进方案的是Yahoo!的一位工程师“JeremyZawodny”。通过这样的改造,这样既在很大程度上解决了性能问题,缩短了异步的延时时间,同时也减少了潜在的数据丢失量。
当然,即使是换成了现在这样两个线程来协作处理之后,同样也还是存在 Slave数据延时以及数据丢失的可能性的,毕竟这个复制是异步的。只要数据的更改不是在一个事务中,这些问题都是存在的。
总结
初步了解了MySQL主从复制的原理。
MySQL主从同步的概述_MySQL主从同步原理介绍相关推荐
- mysql主从不同步怎么恢复_mysql主从不同步时,怎么恢复
mysql主从不同步时,怎么恢复 Mysql的主从数据库没有同步 先上Master库: mysql>show processlist; 查看下进程是否Sleep太多.发现很正常. show ...
- 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主从配置的参数配置与步骤_MySQL 主从配置的步骤: 在主库建立要同步的数据库,建立主库的帐号和修改主备库配置 create database web default character ...
- mysql二进制日志文件差不多_mysql数据同步-基于二进制日志文件和position复制点的方式...
mysql的binlog日志有三种格式,分别为statement,mixed,以及row. 1.Statement:每一条会修改数据的sql都会记录在binlog中 优缺点:1)不用记录每一行的变化, ...
- mysql在线搭建从库_Mysql主从库搭建
基于Docker的Mysql主从复制搭建 首先安装docker 拉取mysql镜像:5.7版本 启动主从数据库容器 docker run -p 3339:3306 --name Maste -e MY ...
最新文章
- 《PSP游戏下载 国际象棋大师:学习的艺术》(Chessmaster : The Art Of Learning)
- hiho一下 第三周 Hiocoder #1015 : KMP算法
- JAVA 串口编程 (三)
- windows下 , py运用了 进程池, 将py打包成exe,出现错误的 解决思路之一
- 【ES】Mac 下安装ES 报错 Failed to create native process factories for Machine Learning
- mate30后续用鸿蒙系统,mate30可以升级鸿蒙不?升级后还能退回原系统吗?
- js自动弹窗被拦截 html,JS打开新窗口防止被浏览器阻止的方法
- 【LDO带载能力和两端压差有关】
- VS编译qt程序后生成的exe文件无法定位程序输入点于动态链接库
- C语言求解一元二次方程代码
- JavaScript object移除
- ElementUI上传文件和额外参数
- Deep Web(深层网络or深度网络)
- 新鲜的蔬菜和水果中富含抗氧化物,可以有效延缓衰老和疾病
- usb驱动程序开发技术总结(三)
- 关于算法工程师,你想知道的都在这里!
- Web UI自动化测试之Selenium工具篇
- Vivado使用技巧(16):SSN转换噪声分析
- 上下Div固定,中间div高度自适应(随浏览器高度变化而变化)
- 硬盘中sata2和sata3接口的区别是什么?