17.2 Replication Implementation

复制是基于master server 跟踪所有改变到他的数据库(更新,删除等等)在它的binary log.

binary log 作为些所有事件修改数据的结构或者内容从server 开始启动

典型的,SELECT 语句是不被记录的因为它们既不修改数据库也不修改内容

每个slave 连接到master 请求一个binary log的拷贝。

也就是说,它从master 拉数据,相比master 推数据到slave.

slave也执行从binary log 执行events 。 这个重复原始的改变 就像它们在master上一样。

表时被创建或者它们的结果修改,数据被插入,删除,和更新根据改变发生在master上一样

因为每个slave 是独立的,replay master 的binary log的改变发生在每个slave (slave是连接到Master)

此外,因为每个slave 接收一份Binary log的拷贝只要通过从master 请求,

slave 是可以读取和更新数据库的拷贝以自己的步伐可以启动和停止复制进程 不影响更新最新的数据库状态在主或者从一侧

master binary log 是些到一个本地的的relay log 在slave端在它被处理前。

Vsftp:/data01/mysql# ls -ltr *relay*
-rw-rw---- 1 mysql mysql 120 Nov 14 10:27 Vsftp-relay-bin.000001
-rw-rw---- 1 mysql mysql 25 Nov 14 10:27 Vsftp-relay-bin.index
-rw-rw---- 1 mysql mysql 221 Nov 14 21:59 mysqld-relay-bin.000006
-rw-rw---- 1 mysql mysql 52 Nov 14 21:59 mysqld-relay-bin.index
-rw-rw---- 1 mysql mysql 198021585 Nov 15 09:14 mysqld-relay-bin.000007 slave 也记录信息关于当前的master binary log和local relay log的位置 17.2.1 Replication Implementation Details 复制实现细节: MySQL 复制功能是实现使用3个进程,一个在master server和2个在slave上。 1.Binlog dump thread,master 创建一个线程来发送binary log 内容到一个slave 当slave连接时。 这个线程可以是被在SHOW PROCESSLIST 的输出在master上 zabbix:/data01/mysql# mysql -uroot -p1234567 -e "SHOW PROCESSLIST" | 198968 | backup | 192.168.11.187:45976 | NULL | Binlog Dump | 46595 | Master has sent all binlog to slave; waiting for binlog to be updated | NULL |
| 204759 | root | localhost | NULL | Query | 0 | init | SHOW PROCESSLIST | binary log dump thread 需要一个lock 在master的binary log 对于读取每个event 发送到slave. 当event 被读取,lock是被释放,甚至在event被发送到slave之前 Slave I/O thread. 当一个START SLAVE 语句是执行在一个slave server,slave 创建一个I/O thread, 连接到master 和告诉master 发送更新记录在master的binary logs. slave I/O thread 读取更新 master的Binlog Dump thread 发送的 复制他们到本地的文件 slave的relay log thread 的状态是显示为Slave_IO_running 在SHOW SLAVE STATUS的输出 或者SHOW STATUS. 的 Slave_running Slave SQL thread slave创建一个SQL thread 来读取relay log 被 slave I/O thread写入的, 执行其中包含的事件 在先前的描述,有三个线程么每个master/slave 连接。一个master 有多个slaves 创建一个binary log dump thread 对于米格连接的slave, 每个slave 有它自己的I/O和SQL threads. 一个slave 使用2个threads 来分别的读取更新从master 和执行它们到单独的任务。 因此,读取任务的语句是不会减慢如果语句执行是慢的, 例如,如果slave server 没有运行一段时间,它的I/O thread 可以快速的获取binary log 内容从master 当slave 开始后, 即使SQL thread 远远落后,如果slave 停止 在SQL thread 已经执行所有取得的SQL之前, I/O thread 已经至少获取了一切这样一个安全的语句的拷贝是存储在本地的slave的relay logs里, 准备用于执行 等下次slave 启动的时候 SHOW PROCESSLIST 语句提供了信息高速你 Master上发生了什么,slave上关于复制 slave:
mysql> SHOW PROCESSLIST ;
+----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------------+------------------+
| 11 | system user | | NULL | Connect | 51213 | Waiting for master to send event | NULL |
| 12 | system user | | NULL | Connect | -140 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL |
| 14 | root | localhost | NULL | Query | 0 | init | SHOW PROCESSLIST |
+----+-------------+-----------+------+---------+-------+-----------------------------------------------------------------------------+------------------+
3 rows in set (0.00 sec) 下面的例子阐述3个线程在SHOW PROCESSLIST的输出 在master server上,SHOW PROCESSLIST 输出像这样: mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
Id: 2
User: root
Host: localhost:32931
db: NULL
Command: Binlog Dump
Time: 94
State: Has sent all binlog to slave; waiting for binlog to
be updated
Info: NULL 在这里, 线程2 是一个 Binlog Dump replication thread 服务一个连接的slave. 状态信息表明所有的更新已经发送到slave ,master是等待更多的更新发生。 如果你看到 no Binlog Dump threads 在master server上, 这意味着复制是没有被运行,没有slave 是当前连接的。 On a slave server, the output from SHOW PROCESSLIST looks like this: 在slave server上,SHOW PROCESSLIST 输出像这样: mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
Id: 10
User: system user
Host:
db: NULL
Command: Connect
Time: 11
State: Waiting for master to send event
Info: NULL
*************************** 2. row ***************************
Id: 11
User: system user
Host:
db: NULL
Command: Connect
Time: 11
State: Has read all relay log; waiting for the slave I/O
thread to update it
Info: NULL 状态信息表明 thread 10 是I/O thread 和master server通讯, 线程11是SQL thread 处理更新存储在relay logs.

17.2.1 Replication Implementation Details 复制实现细节:的更多相关文章

  1. 17.2?Replication Implementation 复制实施:

    17.2?Replication Implementation 复制实施: 17.2.1 Replication Implementation Details 17.2.2 Replication R ...

  2. 17.2.2 Replication Relay and Status Logs 复制Relay 和状态日志;

    17.2.2 Replication Relay and Status Logs 复制Relay 和状态日志: 17.2.2.1 The Slave Relay Log 17.2.2.2 Slave ...

  3. 17.1.4 Replication and Binary Logging Options and Variables 复制和Binary logging 选项和变量

    17.1.4 Replication and Binary Logging Options and Variables 复制和Binary logging 选项和变量 下面的章节包含信息关于mysql ...

  4. 17.1.2?Replication Formats 复制格式:

    17.1.2?Replication Formats 复制格式: 17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Ba ...

  5. 17.1.2 Replication Formats

    17.1.2 Replication Formats 复制格式 17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Bas ...

  6. Accessor Search Implementation Details

    [Accessor Search Implementation Details] Key-value coding attempts to use accessor methods to get an ...

  7. [Angular] Extract Implementation Details of ngrx from an Angular Application with the Facade Pattern

    Extracting away the implementation details of ngrx from your components using the facade pattern cre ...

  8. 第七篇 Replication:合并复制-订阅

    本篇文章是SQL Server Replication系列的第七篇,详细内容请参考原文. 订阅服务器就是复制发布项目的所有变更将传送到的服务器.每一个发布需要至少一个订阅,但是一个发布可以有多个订阅. ...

  9. 第六篇 Replication:合并复制-发布

    本篇文章是SQL Server Replication系列的第六篇,详细内容请参考原文. 合并复制,类似于事务复制,包括一个发布服务器,一个分发服务器和一个或多个订阅服务器.每一个发布服务器上可以定义 ...

随机推荐

  1. SQL Server 2008 TOP 新用途

    /***************创建测试表******************************/ IF NOT OBJECT_ID('[Demo_Top]') IS NULL DROP TAB ...

  2. asp.net 开发问题:Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值。

    "Web 服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值." 这个问题在开发需要上传文件的时候可能会遇到,今天遇到这个问题,百度过也有挺多的修改方法. 方法1: 修 ...

  3. store procedure example

    SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- ...

  4. 我的微软.net演进路线图

    原文地址:我的微软.net演进路线图 我的微软.net演进路线图 我的这几年,编程方面主要是跟在微软旗下奔跑的,主要语言是C# 集成开发环境(IDE) .NET Framework版本 介入年份 Vi ...

  5. 【转】iOS开发——基本常识篇&各种控件默认高度

    原文:http://www.cnblogs.com/iCocos/p/4595614.html 各种控件默认高度   1.状态栏 状态栏一般高度为20像素,在打手机或者显示消息时会放大到40像素高,注 ...

  6. ipod nano 无法添加mp4视频 电影失败解决方法

    我的是nano7. 导入mp4各种错误, 同步资料库 无效等等方法都没用. 后来发现当中 多个mp4,少年pi.mp4竟然导入成功, 怀疑是mp4格式不符合nano 于是:(测试后成功) 先拉到资料库 ...

  7. ZeroMemory和memset的区别

    摘自百度百科,保存为学习使用 ZeroMemory,是美国微软公司的软件开发包SDK中的一个宏. 其作用是用0来填充一块内存区域. 声明 void ZeroMemory( PVOID Destinat ...

  8. LINUX开机启动过程

    LINUX开机启动过程 启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息 ...

  9. 使用link在两个容器之间建立连接(mysql)

    在使用Docker的时候我们会常常碰到这么一种应用,就是我需要两个或多个容器,其中某些容器需要使用另外一些容器提供的服务.比如这么一种情况:我们需要一个容器来提供mysql的数据库服务,而另外两个容器 ...

  10. mini2440移植uboot-2008.10 (二) DM9000网卡驱动移植

    还是利用 mini2440移植uboot-2008.10 (一)  修改好的代码 通过观察可以发现,mini2400使用的网卡芯片是DM9000,在uboot-2008.10源码中已经支持该芯片的驱动 ...