MySQL(4):主从复制原理
1、主从复制概述
MySQL主从复制也可以称为MySQL主从同步,它是构建数据库高可用集群架构的基础。它通过将一台主机的数据复制到其他一台或多台主机上,并重新应用relay log中的SQL语句来实现复制功能。MySQL支持单向、双向、链式级联、异步复制,5.5版本之后加入的半同步复制,5.6版本之后的GTID复制,MySQL5.7的多源复制、并行复制、loss-less复制。
1.1 常见的几种主从架构
1)单向主从模式:Master ——> Slave
2)双向主从模式:Master <====> Master
3)级联主从模式:Master ——> Slave1 ——> Slave2
4)一主多从模式
5)多主一从模式
1.2 主从复制功能
1)实时灾备
2)读写分离
3)高可用
4)从库数据统计
5)从库数据备份
6)平滑升级
1.3 主从复制原理
主从同步过程中主服务器有一个工作线程I/O dump thread,从服务器有两个工作线程I/O thread和SQL thread。
主库把外界接收的SQL请求记录到自己的binlog日志中,从库的I/O thread去请求主库的binlog日志,并将binlog日志写到中继日志中,然后从库重做中继日志的SQL语句。主库通过I/O dump thread给从库I/O thread传送binlog日志。
原理图

2、复制原理
2.1 异步复制
异步复制是MySQL默认的复制方式,主库写入binlog日志后即可成功返回客户端,无须等待binlog日志传递给从库的过程,但是一旦主库宕机,就有可能出现丢失数据的情况。
2.2 半同步复制
MySQL默认的复制方式是异步复制,但是当主库宕机,在高可用架构坐准备切换,就会造成新的主库丢失数据的现象。
MySQL5.5版本之后引入了半同步复制,但是主从服务器必须同时安装半同步复制插件。在该功能下,确保从库接收完成主库传递过来的binlog内容已经写入到自己的relay log后才会通知主库上面的等待线程。如果等待超时(超时参数:rpl_semi_sync_master_timeout),则关闭半同步复制,并自动转换为异步复制模式,直到至少有一台从库通知主库已经接收到binlog信息为止。
半同步复制原理图:

半同步复制提升了主从之间数据的一致性,让复制更加安全可靠,在5.7 版本中又增加了rpl_semi_sync_master_wait_point参数,用来控制半同步模式下主库返回给session事务成功之前的事务提交方式。
该参数有两个值:
1)AFTER_COMMIT:5.6版本的默认值,主库将每个事务写入binlog,并传递给从库,刷新到中继日志中,同时主库提交事务。之后主库开始等待从库的反馈,只有收到从库的回复之后,master才将commit OK的结果反馈给客户端。
2)AFTER_SYNC:5.7版本新增,也是默认的半同步复制方式。主库将每个事务写入binlog并传递给从库,刷新到中继日志中,主库开始等待从库的反馈,接收到从库的回复之后,再提交事务并且返回commit OK结果给客户端。
注意:可以通过rpl_semi_sync_master_wait_for_slave_count参数来控制主库接收多少个从库写事务成功反馈,才返回成功给客户端。生产环境中使用半同步复制方式,当从库出现故障,等待超时的时间又很长,导致主库无法接收从库信息而无法正常写入时,可通过该参数剔除故障从库。另外rpl_semi_sync_master_timeout单位是毫秒,它表示如果主库等待从库回复消息的时间超过该值,就自动切换为异步复制模式,建议调整为很大,禁止向异步复制切换来保证数据复制的安全性。MySQL 5.7默认的半同步复制方式是after_sync模式。
在AFTER_SYNC模式下,即使主库宕机,所有在主库上已经提交的事务都能保证已经同步到从库的中继日志中,不会丢任何数据。
2.3 GTID复制
GTID又叫全局事务ID,是一个以提交事务的编号,并且是一个全局唯一的编号。GTID是由server_uuid和事务id组成的,即GTID=server_uuid:transaction_id。
server_uuid是数据库启动自动生成的,保存在auto.cnf文件下,transaction_id是事务提交时由系统顺序分配的一个不会重复的序列行。
GTID存在的价值:
1)GTID使用master_auto_position=1代替了基于binlog和position号的主从复制方式,更便于主从复制的搭建。
2)GTID可以知道事务在最开始是哪个实例上提交的。
3)GTID方便实现主从之间的failover,无须找position和binlog。
GTID限制条件:
1)不能使用create table table_name select * from table_name。
2)不支持CREATE TEMPORARY TABLE or DROP TEMPORARY TABLE语句操作。
3)不支持sql_slave_skip_counter。
MySQL(4):主从复制原理的更多相关文章
- mysql的主从复制原理与实现
关于mysql的主从复制,之前一直在听说这个话题,一直没有实现,昨天学习了下,原来是这么回事: 既然是主从复制,那么肯定有主有从,也就说一个主数据库(一般为写库),一个从数据库(读库).主数据库更新了 ...
- mysql的主从复制原理
一个简单完整的 Mysql 主从复制,读写分离的示意图. 1. 首先搭建 Mysql 主从架构,实现 将 mater 数据自动复制到 slave MySQL 复制的工作方式很简单,一台服务器作为主机, ...
- Mysql数据库主从复制搭建
Mysql数据库主从复制原理: 主库开启bin-log日志,同时生成IO线程.IO线程负责将用户写入数据库的sql语句记录在二进制日志bin-log,该记录过程可并发进行:生成标识号 server i ...
- mysql 主从复制原理
主从形式 mysql主从复制 灵活 一主一从 主主复制 一主多从---扩展系统读取的性能,因为读是在从库读取的: 多主一从---5.7开始支持 联级复制--- 用途及条件 mysql主 ...
- [转]MySQL主从复制原理介绍
MySQL主从复制原理介绍 一.复制的原理 MySQL 复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新.删除等等).每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以 ...
- Mysql中主从复制的原理、配置过程以及实际案例
Mysql中主从复制的原理.配置过程以及实际案例1.什么是主从复制?原理:主从分离,什么意思呢?我们不妨画个图看看.如图1所示: 2.准备工作:预备两台服务器,我这里使用虚拟机安装了两个Centos6 ...
- Mysql主从复制原理及配置
Mysql主从复制原理及配置 1.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其 ...
- MySQL主从复制--原理
简介 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一 ...
- mysql 主从复制原理(转)
本文转自https://blog.csdn.net/php_younger/article/details/59673879 mysql 主从复制原理 主从形式 mysql主从复制 灵活 一主一从 ...
随机推荐
- FPGA连接
别人推荐,暂时存这了: http://www.eepw.com.cn/news/fpga
- Java动态代理的实现机制
一.概述 代理是一种设计模式,其目的是为其他对象提供一个代理以控制对某个对象的访问,代理类负责为委托类预处理消息,过滤消息并转发消息以及进行消息被委托类执行后的后续处理.为了保持行为的一致性,代理类和 ...
- 安装windows7/8/10到U盘或移动硬盘
https://jingyan.baidu.com/article/e52e36156f6ad240c60c518c.html jpg改rar
- input回车问题
今天有一个问题,就是input对象没有加任何事件自己回车导致跳到了404页面.处理的时候,并发现没找到回车事件的控制. 那么只有一种情况,就是自带的回车控制. 百度了一下,如下面博文里面的写法.我这边 ...
- django进阶-modelform&admin action
先看效果图: 登陆admin后的界面: 查看作者: 当然你也可以定制admin, 使界面更牛逼 数据库表结构: app01/models.py from django.db import models ...
- Visual Studio 2013编译Mozilla NPAPI 示例注意事项
1.Platform Toolset设置Visual Studio 2013 - Windows XP (v120_xp). 2.Character Set设置Use Multi-Byte Chara ...
- cocos2d-x学习之旅(五):1.5 使用eclipse编译cocos2d-x示例项目,创建cocos2d-x android项目并部署到真机
今天将cocos2d-x的示例项目tests编译到android真机运行,以及如何创建cocos2d-x的android项目. 打开cocos2d-x的tests项目,路径为:D:\cocos2d-x ...
- 获取Web.config的内容
<web.config> web.config文件是一个XML文件,它的根结点是<configuration>,在<configuration>节点下的常见子节点有 ...
- AD初体验
首先是因为想用51做个小项目,所以想到不如成这个机会把AD学一下吧,老师说我们这个专业无论画图还是电路设计都得精通,想想自己还是能力欠缺,到大三了才开始学习绘制 原理图. 好了废话不说,下面说说我的第 ...
- 8.17 一个博客demo
2018-8-17 18:13:27 明天周末准备整理一下看看我的博客!!! 说一下思路 1.先搭建框架 1.1 大体分成两块div 左右两部分 <div class="left&qu ...