本文行文路径如下:

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

什么是复制?

官方解释道: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. #20155331 2016-2017-2 《Java程序设计》第3周学习总结

    20155331 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 程序中的类由两个部分组成:属性和方法.属性对应的是对象的特征:方法对应的是对象的行为 ...

  2. QStackedWidget 与 QStackedLayout 的用法区别

    import sys from PyQt5 import QtWidgets, QtCore class MyWidget(QtWidgets.QWidget): def __init__(self, ...

  3. tableView--iOS11适配和iPhoneX适配

    1.UIScrollView及其子类在IOS 11之前的版本UI显示完全正常,但是在IOS 11上面会显示奇葩的界面. (1)先看一下UITablevIew. 原本在VC里面的automaticall ...

  4. 【转载】D3DXVec3TransformNormal and D3DXVec3TransformCoord

    原文:D3DXVec3TransformNormal and D3DXVec3TransformCoord D3DXVec3TransformCoord 对向量进行变换,没啥好说明的,默认向量为行向量 ...

  5. Drupal8 新建第一个模块

    参考: https://www.drupal.org/developing/modules/8 https://www.drupal.org/node/1915030 https://www.drup ...

  6. idea里绝对不要直接复制文件到项目中的另一处

    否则那样会将使用被复制文件的那些地方 文件名会变成复制后的那个 而路径是原来的 所以会导致找不到文件 所以绝对不要直接复制文件或者包或者目录到项目中的另一处 需要时应该新建文件 把代码复制进去 这种事 ...

  7. Spring学习(十)-----Spring依赖检查

    在Spring中,可以使用依赖检查功能,以确保所要求的属性可设置或者注入. 依赖检查模式 4个依赖检查支持的模式: none – 没有依赖检查,这是默认的模式. simple – 如果基本类型(int ...

  8. php实现图形计算器

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

  9. 排序(C语言实现)

    读数据结构与算法分析 插入排序 核心:利用的是从位置0到位置P都是已排序的 所以从位置1开始排序,如果当前位置不对,则和前面元素反复交换重新排序 实现 void InsertionSort(Eleme ...

  10. 套接口socket编程(Client/Server编程实例)

    基本概念 套接口也就是网络中的ID.网络通信,归根到底还是进程间通信(不同计算机上的进程间的通信).在网络中,每一个节点(计算机或路由器)都有一个网络地址,也就是IP地址. IP地址:在网络中唯一标识 ...