本文行文路径如下:

什么是复制?复制是怎么工作的?复制有哪几种表现形式?复制能解决那些问题?业界有哪些数据同步解决方案?

什么是复制?

官方解释道:Replication enables data from one MySQL database server (the master) to be copied to one or more MySQL database servers (the slaves). Replication is asynchronous by default; slaves do not need to be connected permanently to receive updates from the master. Depending on the configuration, you can replicate all databases, selected databases, or even selected tables within a database.

那么简单来说:

1.复制就是从一个服务器把拷贝数据到另一个或者多个服务器;

2.默认情况下是以异步方式拷贝数据的;

3.从库也可以配置过滤器,以此达到应用它只关心数据的目的。

复制是怎么工作的?

首先主库记录所有 数据库更改操作(包括 updates, deletes, and so on)。

然后从库发出读取日志请求,主库接收到请求,主库根据发送过来的position信息并读取本地binlog,主库把读取到的binlog 加载到内存缓冲。(由dump thread 完成)

再然后从库拉取主库日志,进行简单的校验后写入本地的relay log,同时更新本地的postition信息。(由 I/O Thread 完成)

最后从库读取relay log 进行回放,并过滤掉自己不关心的内容进行应用。 (由 SQL Thread 完成)

注意 日志是 slave 主动从 Master 拉取日志,而不由 master 发送给 slave !! (it pulls the data from the master, rather than the master pushing the data to the slave)

复制有哪几种表现形式?

1.同步复制      事物必须在主库和备库同时提交成功

2.异步复制      MySQL默认就采用异步复制,主库提交的事物不需要等到从库接收到或者应用成功

3.半同步复制   在主库提交的事物会block主,直到得知至少一个备库成功接收到主库发送过来的日志事件或者等待超时,如果等待超时,此时半同步会转成异步。

同步,异步,半同步复制的比较:

同步复制:Master提交事务,直到事务在所有的Slave都已提交,此时才会返回客户端,事务执行完毕。缺点:完成一个事务可能会有很大的延迟。

异步复制:当Slave准备好才会向Master请求binlog。缺点:不能保证一些事件都能够被所有的Slave所接收。

半同步复制:半同步复制工作的机制处于同步和异步之间,Master的事务提交阻塞,只要一个Slave已收到该事务的事件且已记录。它不会等待所有的Slave都告知已收到,且它只是接收,并不用等其完全执行且提交。

复制可以解决什么问题?

1.服务的高可用,备库可以提升为主库,减少down机时间,双主时承担HA角色

2.服务的高性能,备库可以做为查询,统计分析使用,分担主库负载,承担LB角色

3.延迟备库做为 数据备份恢复使用,应对误删除带来的数据不可恢复性

4.为不停服升级,提供了解决方案

5.为压力测量,性能测试提供了环境

数据同步方案有哪些?

  1. Oracle  DataGuard (只能是Oracle DB 之间进行同步)
  2. Oracle  GoldGate (支持异构数据库之间的同步)
  3. SymmetricDS ( 支持异构数据之间同步)
  4. Canal (阿里开源项目,目前只支持MySQL)
  5. otter (阿里开源项目,基于canal基础上修改,支持异构数据源)

附录:

初探复制你需要知道: http://www.cnblogs.com/hustcat/archive/2009/12/19/1627525.html

Semi Sync : http://www.orczhou.com/index.php/2011/06/mysql-5-5-semi-sync-replication-setup-config/

otter : https://github.com/alibaba/otter/wiki/Introduction

canal : https://github.com/alibaba/canal

MySQL复制 -- 应用场景的更多相关文章

  1. MYSQL 复制详解

    MySql 复制介绍 MySQL复制允许将主实例(master)上的数据同步到一个或多个从实例(slave)上,默认情况 下复制是异步进行的,从库也不需要一直连接到主库来同步数据 MySQL复制的数据 ...

  2. 浅析MySQL复制

    MySQL的复制是基于binlog来实现的. 流程如下 涉及到三个线程,主库的DUMP线程,从库的IO线程和SQL线程. 1. 主库将所有操作都记录到binlog中.当复制开启时,主库的DUMP线程根 ...

  3. MYSQL复制

    今天我们聊聊复制,复制对于mysql的重要性不言而喻,mysql集群的负载均衡,读写分离和高可用都是基于复制实现.下文主要从4个方面展开,mysql的异步复制,半同步复制和并行复制,最后会简单聊下第三 ...

  4. 理解MySQL——复制(Replication)

    1.复制概述 1.1.复制解决的问题数据复制技术有以下一些特点:(1)    数据分布(2)    负载平衡(load balancing)(3)    备份(4)    高可用性(high avai ...

  5. 生产环境搭建MySQL复制的教程(转)

    [导读] 网络上有很多关于MySQL复制搭建的步骤和范例,以及手册上有一章完整的篇幅,讲述MySQL复制的原理.搭建步骤.优化等,但依然存在很多刚开始学习MySQL知识或者刚进入DBA行业的朋友咨询, ...

  6. MySQL 复制 - 性能与扩展性的基石 1:概述及其原理

    1. 复制概述 MySQL 内置的复制功能是构建基于 MySQL 的大规模.高性能应用的基础,复制解决的基本问题是让一台服务器的数据与其他服务器保持同步. 接下来,我们将从复制概述及原理.复制的配置. ...

  7. 深入MySQL复制(一)

    本文非常详细地介绍MySQL复制相关的内容,包括基本概念.复制原理.如何配置不同类型的复制(传统复制)等等.在此文章之后,还有几篇文章分别介绍GTID复制.半同步复制.实现MySQL的动静分离,以及M ...

  8. 涂抹mysql笔记-mysql复制特性

    <>mysql复制特性:既可以实现整个服务(all databases)级别的复制,也可以只复制某个数据库或某个数据库中的某个指定的表对象.即可以实现A复制到B(主从单向复制),B再复制到 ...

  9. 31.Mysql复制

    31.Mysql复制复制是指将主数据库的DDL和DML操作通过二进制日志传到从数据库上,然后在从数据库上对重做日志,从而使从库与主库保持同步.Mysql支持一台主库同时向多台从库复制,从库也可以作为其 ...

随机推荐

  1. rman的基于窗口的备份保留策略学习

    例如: rman>configure retention policy to recovery window of 7 days; 那么就是说,至少要使得保留下来的备份,可以支持恢复到从当前回溯 ...

  2. 记boost在gcc的一个库链接问题generic_category()

    报错大致如下: main.cpp:(.text+0x49): undefined reference to `boost::system::generic_category()'main.cpp:(. ...

  3. QML和JS引擎的关系以及调用c++函数的原理

    首先推荐几篇博客 1.深入解析QML引擎, 第1部分:QML文件加载 https://www.cnblogs.com/wzxNote/p/10569535.html 2.深入解析QML引擎, 第2部分 ...

  4. abp core版本添加额外应用层

    1.新建类库WebProject.Application.App 2.添加WebProjectApplicationAppModule.cs 3.注册模块 using Abp.Application. ...

  5. javaweb(三十三)——使用JDBC对数据库进行CRUD

    一.statement对象介绍 Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可. Statement对象的exe ...

  6. testNG-失败用例重跑机制

    下面简单介绍下testNG的失败重跑的实现方法: 1.首先编写一个类,实现IRetryAnalyzer类,重写其中的retry方法. public class TestNGRetry implemen ...

  7. selenium+python 搭建自动化环境

    一.以搭建windows平台为例 准备工具如下: 1)下载Python 2)安装,配置环境变量 3)安装selenium,通过pip安装,命令如下:  pip install selenium 方式二 ...

  8. Unity 编辑器扩展 Chapter2—Gizmos

    二. 使用Gizoms绘制网格及矩阵转换使用 1. 创建Leve类,作为场景控制类: using UnityEngine; //使用namespace方便脚本管理 namespace RunAndJu ...

  9. flex布局与ellipsis冲突问题

    在flex布局里使用text-overflow: ellipsis;发现没有省略. 解决方案 .g-flex-c{ flex: 1; min-width: 0; }

  10. 多主机Docker容器的VLAN划分

    原文发表于cu:2016-06-06 参考文档: Docker网络的4种模式,pipework/ovs的简单使用等:http://www.infoq.com/cn/articles/docker-ne ...