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. zzzzw_在线考试系统②管理员篇章

    今天实现了管理的功能,谈谈遇到的问题!我先上图 图一   管理员的数据库 在action中访问Servlet API的非IoC方式之一:使用apache.struts2.ServletActionCo ...

  2. dynamic关键字

    public class TestClass { public dynamic Values { get; set; } } public class Test { static void Func( ...

  3. powerbulider9.0在数据窗口中实现滚动到新添加行

    powerbuilder9.0对数据窗口进行增加行操作,然后实现滚动到指定行时,应先滚动到指定行dw_1.scrolltorow( row),然后设置新添加的行为当前行dw_1.setrow( row ...

  4. linux字符过滤

    1  案例一:取eth0的IP地址 方法一:通过cut方法过滤 [root@baiguin ~]# ifconfig eth0|grep "inet addr:"|cut -d & ...

  5. 理解RunLoop

    一.什么是RunLoop? 从字面意思上来看,RunLoop就是运行循环,跑圈的意思. 我们都知道,一般来说一个线程执行一次任务之后便会退出,在iOS中,如果主线程只执行一次便退出的话也就意味着程序的 ...

  6. 11_关于SqlMapperConfig.xml

    [简述] SqlMapConfig.xml是Mybatis的全局配置文件,配置内容如下: 1.properties---------属性 2.settings-----------全局配置参数 3.t ...

  7. 不对称密钥密码体系之RSA

    公钥密码的特性: 1.加密和解密使用不同的钥匙 2.从一个钥匙推出另一个钥匙在计算上不可行 3.每个钥匙都可以做加密和解密 RSA算法: 1978年, MIT三位数学家 R.L.Rivest,A.Sh ...

  8. apache的MPM机制-prefork

    apache是基于模块化设计的. 关于基础的服务,也采用了模块化的设计,但是这个模块是具有排他性的,同一时间只能有一个得到调用. MPM模块(multi processing module) 多处理模 ...

  9. js微博发布框

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. centos 基本操作(输入法安装,adls宽带连接,查找文件,模拟终端)

    centos 基本操作之输入法安装输入法启动终端,切换到超级管理员yum install "@Chinese Support"安装成功后,退出System->Preferen ...