本文行文路径如下:

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

什么是复制?

官方解释道: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. sql语句-7-更新数据

  2. bzoj1861 书架

    bzoj1861 书架 原题链接 神题... 先吐槽洛谷的样例 10 10 1 3 2 7 5 8 10 4 9 6 Query 3 Top 5 Ask 6 Bottom 3 Ask 3 Top 6 ...

  3. php实现图形计算器

    存档: index.php <html> <head> <title>图形计算器开发</title> <meta http-equiv=" ...

  4. linux菜鸟笔记

    linux目录的子目录复制 cp -r 要复制的目录+新的目录 cp -r a test 意思就是将a的子目录及文件复制到新的目录test下面 zt@ubuntu:~/Desktop$ mkdir - ...

  5. HTML5 + CSS3 实现地球绕太阳公转

    使用的是正面视角,主要是用 HTML5 + CSS3 来实现,JS只是用来画图. test.html: <!DOCTYPE html> <html> <head> ...

  6. 面向英特尔® x86 平台的 Unity* 优化指南: 第 1 部分

    原文地址 目录 工具 Unity 分析器 GPA 系统分析器 GPA 帧分析器 如要充分发挥 x86 平台的作用,您可以在项目中进行多种性能优化,以最大限度地提升性能. 在本指南中,我们将展示 Uni ...

  7. 解决webstorm中测试dva项目run start命令需要不断重启问题

    用dva-cli构建了项目之后在webstorm开发,用npm start跑本地服务,经常修改之后在浏览器刷新没反应,偶尔才会有刷新,需要重新跑一遍npm start才会更新,这是怎么回事呢? web ...

  8. 利用Pillow给图片添加重点框(适用UI自动化测试)

    效果图 一个简单的例子 安装Pillow 在cmd窗口/终端输入: pip install pillow 如果被墙,下载巨慢的话,可以临时替换豆瓣源 pip install pillow -i htt ...

  9. Spark之spark shell

    前言:要学习spark程序开发,建议先学习spark-shell交互式学习,加深对spark程序开发的理解.spark-shell提供了一种学习API的简单方式,以及一个能够进行交互式分析数据的强大工 ...

  10. VPS挂机赚美刀详细介绍–Alexamaster操作流程

    跟 vps 主机打交道时间长了,手里也渐渐积累了些闲置的 vps.让它们这么闲着吧,感觉有些浪费资源:用起来吧,暂时又没有好的项目.一直听说通过 vps挂机可以赚回主机成本,甚至可以盈利.正好这两天有 ...