一下内容均是根据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 主从复制原理的更多相关文章

  1. MySQL(4):主从复制原理

    1.主从复制概述 MySQL主从复制也可以称为MySQL主从同步,它是构建数据库高可用集群架构的基础.它通过将一台主机的数据复制到其他一台或多台主机上,并重新应用relay log中的SQL语句来实现 ...

  2. MySQL-快速入门(15)MySQL Replication,主从复制

    1.何为主从复制. 从一个MySQL主服务器(master)将数据复制到另一台或多台MySQL从服务器(slaves)的过程,将主数据库的DDL和DML操作通过二进制日志传到复制服务器上,然后在从服务 ...

  3. MySQL主从复制原理及配置过程

    一.Mysql数据库的主从复制原理过程: (多实例的安装请参考我的另一篇文章:https://www.cnblogs.com/Template/p/9258500.html) Mysql的主从复制是一 ...

  4. 深度探索MySQL主从复制原理

    深度探索MySQL主从复制原理 一 .概要 MySQL Replication (MySQL 主从复制) 是什么? 为什么要主从复制以及它的实现原理是什么? 1.1 MySQL 主从复制概念 MySQ ...

  5. MySQL 主从复制原理及过程讲解

    mysql主从原理描述,摘自老男孩. 下面简 单描述下 MySQL Replication 复制的原理及过程 . 1.在 Slave 服务器上执行 start slave 命令开启主从复制开关,主从复 ...

  6. 浅析 MySQL Replication(本文转自网络,非本人所写)

    作者:卢飞 来源:DoDBA(mysqlcode) 0.导读 本文几乎涵盖了MySQL Replication(主从复制)的大部分知识点,包括Replication原理.binlog format.复 ...

  7. 第 13 章 可扩展性设计之 MySQL Replication

    前言: MySQL Replication 是 MySQL 非常有特色的一个功能,他能够将一个 MySQL Server 的 Instance 中的数据完整的复制到另外一个 MySQL Server ...

  8. 浅析 MySQL Replication(本文转自网络)

    作者:卢飞 来源:DoDBA(mysqlcode) 0.导读 本文几乎涵盖了MySQL Replication(主从复制)的大部分知识点,包括Replication原理.binlog format.复 ...

  9. MySql(十三):MySql架构设计——可扩展性设计之 MySQL Replication

    一.前言 MySQL Replication能够将一个 MySQL Server 的 Instance 中的数据完整的复制到另外一个 MySQL Server 的 Instance 中.虽然复制过程并 ...

随机推荐

  1. Scala- Double类型工具类

    格式化分数,按照指定小数位四舍五入工具类 package com.rz.util object NumberUtils { /** * 格式化小数 * @param num Double对象 * @p ...

  2. 记升级mysql后的一次故障

    一.问题背景 接上级要求,某生产数据库需要实施备份:刚好漏洞扫描报告出来,mysql 版本需要升级到5.7.20,于是就未雨绸缪,先写脚本.脚本在mysql旧版本下完全可用(未升级前,mysql 为5 ...

  3. Kinect 2.0 默认姿势的中文意思

    RaiseRightHand/RaiseLeftHand 抬起左右手高于肩膀一秒Psi 举起双手高于肩膀一秒Tpose T姿势Stop 右手放下,左手缓慢贴住身侧(腰以下)或者左右调换Wave 挥手 ...

  4. Android DDMS ADB启动失败错误解决!

    ADB server didn't ACK && make sure the plugin is properly configured! adb启动失败一般是端口被占用! 解决方法和 ...

  5. 四十二 Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mget和bulk批量操作

    注意:前面讲到的各种操作都是一次http请求操作一条数据,如果想要操作多条数据就会产生多次请求,所以就有了mget和bulk批量操作,mget和bulk批量操作是一次请求可以操作多条数据 1.mget ...

  6. 51nod-1201-数位dp

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1201 1201 整数划分 基准时间限制:1 秒 空间限制:131072 ...

  7. Gradle 一(Android)

    参考一:Gradle 完整指南(Android) 参考二:深入理解Android(一):Gradle详解 参考三:Gradle for Android 第一篇( 从 Gradle 和 AS 开始 ) ...

  8. New Concept English three (45)

    31w/m 65error In democratic countries any efforts to restrict the freedom of the press are rightly c ...

  9. js实现把中文、英文标点转换

    所有英文符号转换成中文的符号 <SCRIPT LANGUAGE="JavaScript"> <!-- function meizz(str) { var tmp ...

  10. 关于for循环中是否需要缓存length值的个人总结

    在JS性能优化中,有一个常见的小优化,即 // 不缓存 for (var i = 0; i < arr.length; i++) { ... } // 缓存 var len = arr.leng ...