目录
6.2.1—企业级MySQL高可用复制与分布式集群架构—MySQL主从复制项目实施与维护01(MR)—MySQL主从复制相关技术概念讲解01
1.MySQL复制技术基础之基本原理
2.MySQL复制技术基础之常用主从拓扑
3.MySQL复制技术基础之同步方式(异步/半同步/无损同步/全同步)
4.MySQL复制技术基础之同步模式(传统/GDIT)
5.MySQL复制技术基础之常用配置参数详解
6.MySQL真正的生产高可用复制环境1-传统异步复制项目
7.MySQL真正的生产高可用复制环境2-传统无损同步项目
8.MySQL真正的生产高可用复制环境3-基于GTID异步复制项目
9.MySQL真正的生产高可用复制环境4基于GTID无损同步项目
10.MySQL真正的生产高可用复制环境5~增加/删除/扩容复制节点
11.MySQL真正的生产高可用复制环境6-主多 从安全复制项目
12.MySQL真正的生产高可用复制环境7级联主从复制项目
13.MySQL真正的生产高可用复制环境8-多主- - -从多源复制项目
14.MySQL主从复制项目之主从切换(正常切换/宕机切换)
15.MySQL主从复制项目之在线开启/关闭GTID
16.MySQL主从复制项目之SSL安全配置
17.MySQL主从复制项目之主从同步数据校验
一、MySQL复制技术的介绍
1、主从复制:
是MySQL数据库的一种容灾备份方案,是MySQL自带的功能,无需借助第3三方工具,MySQL的主从复制并不是数据库磁盘上的文件直接拷贝,而是通过逻辑的binlog日志
复制到要同步的服务器本地,然后由本地的线程读取日志里面的SQL语句重新应用到MySQL数据库中。
2、主从复制的应用场景
(1)应用场景
数据备份与容灾、读写分离、业务拆分
(2)使用公司
适合于初创公司,小型电商/互联网公司,一些小型云环境。
(3)切换技术
手工切换,时间: >30分钟(含重做主从关系,数据校验等)
自动切换,时间:按分钟计算。
3、主从复制架构图
4、重做日志与二进制日志( redo log与binlog )区别
(1)日志分类
--二进制日志:
记录MySQL数据库相关的日志记录,包括InnoDB , MyISAM等其它存储弓|擎的日志。
--重做日志:
只记录InnoDB存储弓|擎本身的事务日志。
(2)写入内容
--二进制日志:
记录事务的具体操作内容,是逻辑日志。
--重做日志:
记录每个页的更改的物理情况。
(3)写入时间
--二进制日志:
只在事务(提交后)进行写入,只写磁盘-次,不论这时事务量多大。
--重做日志:
在事务进行中( 提交前和提交时) , 就不断有重做日志条目(redo entry)写入重做日志文件。
二、MySQL主从复制是如何工作的
1、主从流程
复制一共分3个步骤:
(1)master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件, binary log events)
master记录二进制日志,在每个事务更新数据完成之前, master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,在事件写入二进制日志完成后,master通知存储引擎提交事务。
(2)slave将master的binary log events拷贝到它的中继日志(relay log);
首先, slave开始一个工作线程: I/O线程。
I/O线程在master上打开一个普通的连接,然后开始binlog dump process。
Binlog dump process从master的二进制日志中读取事件(接受的单位是event) ,如果已经跟上master ,它会睡眠并等待master产生新的事件。
I/O线程将这些事件写入中继日志。
(3)slave重做中继日志中的事件,将日志操作还原并生成数据。
SQL线程从中继日志读取事件,并重放其中的事件(回放的单位也是event而更新slave的数据,使其与master中的数据一致。 只要该线程与/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。
在master中也有一个工作线程:
和其它MySQL的连接-样, slave在master中打开一个连接也会使得master开始一个线程。
2、主服务器
(1)在MySQL 5.7版本中,prepare log部分的日志也是组提交的
prepare log和commit log写redo file ( iblogfile1、 iblogfile2 )
binlog写binlig.00000X文件
(2)binglog,redo log先写哪个
redo log在事物执行期间,连续写入;
binlog在commit之后只写一次。
(3)InnoDB commit的3个阶段:
1阶段. wite prepare log -写入Xid
2阶段. write binlog
3阶段. write commit log
(4)MySQL Dump Thread把binlog推送到远程的Slave服务器
每一个Slave,就会对应有一 个dump线程
(5)同时,在MySQL主机上还有一个Master Thread在每隔1秒从redo log buffer中写入redo file
3、从服务器
(1)IO Thread负责接收Dump线程发送过来的binlog , 并且记录到本地的relay log
接受的单位是event
(2)SQL Thread/Coordinator Thread协调线程负责将relay log日志回放到从机
回放的单位也是event 有了多线程以后, coordinator线程负责任务指派, work thread负责回放
(3)在MySQL 5.6中的多线程回放是基于库的,单个库还是单线程
(4)在MySQL5.7中的多线程是在主.上如何并行执行的,从机上也是如何并行回放的
(5)master-info.log存放了接受到的binlog的位置( event的位置 )
(6)relay-info.log存放了回放到的relay log的位置( event的位置)
4、主从复制架构图
5、