mysql replication /mysql 主从复制原理
一下内容均是根据leader的培训分享整理而成
************************************我是分割线****************************************
mysql5.5 replication
大概过程:
一。首先在master 执行一个事物,提交(mysql默认设置为自动提交),
二。提交之后 写到2个文件,一个是将数据写入datafile(这个数据是结果一致,例如有个数据单元开始数据是1,中间经过2,3等变化,最后是4,那么写入最终结果4), 一个是将事物写入bin_log(binary log),确切说不一定是事物,具体分为3种,1.statement-based logging, 2.row-based loggging,3.mixed logging.
binlog 里是很多的event, binlog开头是4个空位,具体作用不详(据leader讲是event开始的标志)。4个空位后有一位表示Format Description E(FDE),以事物为单位向binlog写数据,一个事物可以包含n个event,binlog结束有xid标志。(toconfirm:xid是一个事物的结束符号还是binlog内容结束的符号?)
每一个event里都有校验位,如果网络传输出现问题可以断点续传之类的,
三。master 把 binlog文件通过一个叫dump的线程传给slave, slave 将接到的event写入一个叫Relay log(中继日志)的文件,然后根据relay log用一个叫applier的东西 做commit(写datafile, 和 binlog)
binlog 和relay log 内容不总是相同,因为可以设置eventsize,如果master上有一个事物写入到binlog后使得size 超过eventsize(可以撑大,因为binlog以事物为单位存,而非event为单位), 这样传给slave后,当relay log达到slave端的event size后就会起新文件写入后续接收到的event.
unsafe的replication, 如果事物中含有rand类的赋值是safe的,因为event记录中有rand的种子, 可是如果有now()这样的赋值就是unsafe,因为有时间差,这时候statement-based logging 就会出错,可以用mixed logging.
mysql5.5版本的replication存在的问题:
主从数据差异:对主的操作可以是多并行,可是向从写入确实将多个并行的操作记录到binlog,然后串行的发送给从, 所以从的数据在没有完全执行完binlog前跟主存在差异, 而且并行到串行执行的效率可能也会差很大。解决方式,对从的操作考虑并行,或者semisynchronize, 可是如果同时并行,主的运行效率可能要下降,因为它既要执行自己的并行操作,还要将binlog里的event并行的发给从。semisychronize是适当降低主的并发操作,等待从,但是如果从的响应过慢,严重影响主的响应,主就要继续执行自己的并发。
************************************我是分割线****************************************
mysql 5.6 replication
一。使用gtid, 而不再是bin log 的pos来标识event 。因为如果存在像 master-->slave1(pos 100)--->slave2(pos 80), master-->slave3(pos150)这样的主从结构,如果master突然down掉,slave3变成主从的话, slave2将无法分辨下一条event的位置, slave2(pos80)只是相对自己相连的slave1里的binlog而言的event pos
二。使用MTS(multiple thread slave) 以schema为单位的多线程,因为对不同schema的操作不会相互影响,所以可以并行
************************************我是分割线****************************************
GroupCommit(组提交), mysql的多个提交并成组,目的是提高写速度,binlog 和groupcommit同用会有问题
toconfirm(mysql bug 70370)
************************************我是分割线****************************************
semisynthronize 过程
半同步的意义eg:用户在主上执行了插入,从的数据还没有更新,用户的主上可以查到新数据,从上却查不到。
为了解决类似上述的问题使用semisynthronize, 执行用户的操作 commit先不要执行,写入binlog, 然后将binlog 里新加入的event dump给Slave, slave 接受好之后给主ACK, 然后主在commit。
mysql replication /mysql 主从复制原理的更多相关文章
- MySQL(4):主从复制原理
1.主从复制概述 MySQL主从复制也可以称为MySQL主从同步,它是构建数据库高可用集群架构的基础.它通过将一台主机的数据复制到其他一台或多台主机上,并重新应用relay log中的SQL语句来实现 ...
- MySQL-快速入门(15)MySQL Replication,主从复制
1.何为主从复制. 从一个MySQL主服务器(master)将数据复制到另一台或多台MySQL从服务器(slaves)的过程,将主数据库的DDL和DML操作通过二进制日志传到复制服务器上,然后在从服务 ...
- MySQL主从复制原理及配置过程
一.Mysql数据库的主从复制原理过程: (多实例的安装请参考我的另一篇文章:https://www.cnblogs.com/Template/p/9258500.html) Mysql的主从复制是一 ...
- 深度探索MySQL主从复制原理
深度探索MySQL主从复制原理 一 .概要 MySQL Replication (MySQL 主从复制) 是什么? 为什么要主从复制以及它的实现原理是什么? 1.1 MySQL 主从复制概念 MySQ ...
- MySQL 主从复制原理及过程讲解
mysql主从原理描述,摘自老男孩. 下面简 单描述下 MySQL Replication 复制的原理及过程 . 1.在 Slave 服务器上执行 start slave 命令开启主从复制开关,主从复 ...
- 浅析 MySQL Replication(本文转自网络,非本人所写)
作者:卢飞 来源:DoDBA(mysqlcode) 0.导读 本文几乎涵盖了MySQL Replication(主从复制)的大部分知识点,包括Replication原理.binlog format.复 ...
- 第 13 章 可扩展性设计之 MySQL Replication
前言: MySQL Replication 是 MySQL 非常有特色的一个功能,他能够将一个 MySQL Server 的 Instance 中的数据完整的复制到另外一个 MySQL Server ...
- 浅析 MySQL Replication(本文转自网络)
作者:卢飞 来源:DoDBA(mysqlcode) 0.导读 本文几乎涵盖了MySQL Replication(主从复制)的大部分知识点,包括Replication原理.binlog format.复 ...
- MySql(十三):MySql架构设计——可扩展性设计之 MySQL Replication
一.前言 MySQL Replication能够将一个 MySQL Server 的 Instance 中的数据完整的复制到另外一个 MySQL Server 的 Instance 中.虽然复制过程并 ...
随机推荐
- Pandas排序
Pandas有两种排序方式,它们分别是 - 按标签 按实际值 下面来看看一个输出的例子. import pandas as pd import numpy as np unsorted_df=pd.D ...
- scala学习手记40 - case表达式里的模式变量和常量
再来看一下之前的一段代码: def process(input: Any) { input match { case (a: Int, b: Int) => println("Proc ...
- spring3: AOP 之切面实例化模型 ——跟我学spring3
所谓切面实例化模型指何时实例化切面. Spring AOP支持AspectJ的singleton.perthis.pertarget实例化模型(目前不支持percflow.percflowbelow ...
- 【Python】UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3
问题如下: UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3 解决方法: 程序开始加上下面两句 sys ...
- iframe标签用法详解
功能:iframe标签用于定义内联框架. 语法:<iframe></iframe> 内联框架是在一个页面中嵌入另一个页面. 有很多网页看上去是一个网页,但实际上它其中可能镶 ...
- Hadoop WordCount程序
一.把所有Hadoop的依赖jar包导入buildpath,不用一个一个调,都导一遍就可以,因为是一个工程,所以覆盖是没有问题的 二.写wordcount程序 1.工程目录结构如下: 2.写mappe ...
- LeetCode OJ:Product of Array Except Self(除己之外的元素乘积)
Given an array of n integers where n > 1, nums, return an array output such that output[i] is equ ...
- TCPL学习笔记:4-12以及4-13。关于使用递归的问题。
4-12.写一个函数itoa,通过递归调用将整数转换成为字符串. #include <stdio.h> #include <stdlib.h> void Itoa(int nu ...
- WordCounter Python实现
<!doctype html>博客.md p:first-child, #write > ul:first-child, #write > ol:first-child, #w ...
- String、StringBuffer、StringBuilder分析(jdk8)
以下代码只挑选了关键方法进行分析 public final class String //String类不可继承,实现了序列化 implements java.io.Serializable, Com ...