Replication 线程

Mysql 的Replication 是一个异步的复制过程,从一个Mysql instace(我们称之为Master)复制到另一个Mysql instance(我们称之Slave)。在Master 与Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql 线程和IO 线程)在Slave 端,另外一个线程(IO 线程)在Master 端。

要实现MySQL 的Replication ,首先必须打开Master 端的Binary Log(mysqlbin.xxxxxx)功能,否则无法实现。因为整个复制过程实际上就是Slave 从Master 端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作


MySQL 复制的基本过程如下:
1. Slave 上面的IO 线程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
2. Master 接收到来自Slave 的IO 线程的请求后,通过负责复制的IO 线程根据请求信息读取指定日志指定位置之后的日志信息,返回给Slave 端的IO 线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在Master 端的Binary Log文件的名称以及在Binary Log 中的位置;
3. Slave 的IO 线程接收到信息后,将接收到的日志内容依次写入到Slave 端的Relay Log 文件(mysql-relay-bin.xxxxxx)的最末端,并将读取到的Master 端的binlog的文件名和位置记录到master-info 文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log 的哪个位置开始往后的日志内容,请发给我”

4. Slave 的SQL 线程检测到Relay Log 中新增加了内容后,会马上解析该Log 文件中的内容成为在Master 端真实执行时候的那些可执行的Query 语句,并在自身执行这些Query。这样,实际上就是在Master 端和Slave 端执行了同样的Query,所以两端的数据是完全一样的。

可能有些读者朋友会有一个担心,这样搭建复制环境之后,难道不会造成两台MySQL 之间的循环复制么?

    实际上MySQL 自己早就想到了这一点,所以在MySQL 的Binary Log 中记录了当前MySQL 的server-id,而且这个参数也是我们搭建MySQL Replication 的时候必须明确指定,而且Master 和Slave 的server-id 参数值比需要不一致才能使MySQLReplication 搭建成功。一旦有了server-id 的值之后,MySQL 就很容易判断某个变更是从哪一个MySQL Server 最初产生的,所以就很容易避免出现循环复制的情况。而且,如果我们不打开记录Slave 的Binary Log 的选项(--log-slave-update)的时候,MySQL 根本就不会记录复制过程中的变更到Binary Log 中,就更不用担心可能会出现循环复制的情形了。

MySQL Replication 线程(理解详细过程)的更多相关文章

  1. MySQL备份与还原详细过程示例

    MySQL备份与还原详细过程示例 一.MySQL备份类型 1.热备份.温备份.冷备份 (根据服务器状态) 热备份:读.写不受影响: 温备份:仅可以执行读操作: 冷备份:离线备份:读.写操作均中止: 2 ...

  2. 安装配置OPENCMS的Replication cluster(从)详细过程

    1.  把opencms.war拷贝到tomcat下的webapps目录,启动tomcat服务. 2.  在安装之前,打开解压缩后的war包目录(tomcat启动后会自动把war包解开),删除目录 $ ...

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

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

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

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

  5. MySQL性能调优与架构设计——第13章 可扩展性设计之 MySQL Replication

    第13章 可扩展性设计之 MySQL Replication 前言: MySQL Replication 是 MySQL 非常有特色的一个功能,他能够将一个 MySQL Server 的 Instan ...

  6. 浅谈MySQL Replication(复制)基本原理

    1.MySQL Replication复制进程MySQL的复制(replication)是一个异步的复制,从一个MySQL instace(称之为Master)复制到另一个MySQL instance ...

  7. MySQL Replication 常用架构

    转自: http://www.cnblogs.com/ggjucheng/archive/2012/11/13/2768879.html 前言 MySQLReplicaion本身是一个比较简单的架构, ...

  8. Mysql加锁过程详解(3)-关于mysql 幻读理解

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  9. Mysql加锁过程详解(2)-关于mysql 幻读理解

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

随机推荐

  1. 在windows上构建LLVM 7.0.1

    关于在windows上构建LLVM,网上有不少文章,但都是互相抄来的,写作时极不认真,不是少这个,就是少那个,没有一篇是可以完整照着做下来的,实在气人. 本文的安装和配置过程,我亲自操作过好几遍,不惜 ...

  2. 5+App使用定位

    1.定位方法     5+App定位方法:5+ API中的Geolocation模块     Geolocation目前支持h5内置的定位,百度,高德.h5内置定位支持wgs84坐标系:百度支持gcj ...

  3. 微信小程序开发环境

    微信小程序开发环境 不忘初心,方得始终.初心易得,始终难守 小程序开发环境 开发工具下载地址:https://developers.weixin.qq.com/miniprogram/dev/devt ...

  4. Hive-复制表

    非分区表复制 复制一张非分区表,使用CREATE TABLE IF NOT EXISTS AS SELECT * FROM tb_name;只复制表结构,CREATE TABLE IF NOT EXI ...

  5. Adobe9阅读器渗透攻击——20145301

    Adobe9阅读器渗透攻击 实验步骤: 在kali终端中开启msfconsole,输入命令use exploit/windows/fileformat/adobe_cooltype_sing,进入该漏 ...

  6. 20145306 张文锦 网络攻防 web基础

    20145306 网络攻防 web基础 实验内容 WebServer:掌握Apache启停配置修改(如监听端口)前端编程:熟悉HTML+JavaScript.了解表单的概念编写不同的HTML网页,放入 ...

  7. 20145337《网络对抗技术》Web安全基础实践

    20145337<网络对抗技术>Web安全基础实践 一.实验后回答问题 1.SQL注入攻击原理,如何防御 SQL注入攻击的本质是利用SQL语法,针对应用程序开发过程中的漏洞,从一个数据库获 ...

  8. noip 2013 提高组 Day2 部分题解

    积木大赛: 之前没有仔细地想,然后就直接暴力一点(骗点分),去扫每一高度,连到一起的个数,于是2组超时 先把暴力程序贴上来(可以当对拍机) #include<iostream> #incl ...

  9. Email移动的原理

    1.从数据库中得到被移动邮件的uid: 2.选择移动邮件所属folder,即SelectFolder; 3.调用copymessage(path,vmime::net::messageset::byU ...

  10. 【第三十六章】 metrics(4)- metrics-graphite

    将metrics report给graphite(carbon-relay) 一.代码 1.pom.xml <!-- metrics-graphite --> <dependency ...