关于mysql主从复制的概述与分类(转)
一、概述:
按照MySQL的同步复制特点,大体上可以分为三种类别:
1、异步复制;
2、半同步复制;
3、完全同步的复制;
--------------------------------------------------------------------------------------------------
(一)、异步复制:
1、概念
mysql的异步复制在业界中的叫法有很多,比如:AB复制、主从同步、mysql replication等等。说白了就是master和slave结构。在mysql5.6版本以后又进一步的细分成:传统的复制方法和全新的复制方法。
2、5.6以后的mysql主从复制的分类:
2.1、传统复制方法是按照binlog的三种日志格式进行划分的:
基于语句的复制,即statement模式。
基于行的复制,即row模式。
基于混合的复制,即mixed
2.2、全新的复制方法:基于GTID的复制。
3、关于master和slave的关系:
不是主备模式,而是数据镜像。
特别在GTID环境下,不能在slave上做dml操作。
slave拿到master上的日志,在slave上以串行的方式进行重放。
I/O现成是一个(串行),sql线程和DB一样多。
结构可以分为:一主一从、一主多从、双主多从。
4、master和slave的作用:
实现读写分离。
从库可以用作故障转移。(master挂了,vip切换到slave端)
用从库做备份,或者特殊统计。(一条大sql跑一下需要很久,可以单独找个slave单独来跑)
用于主库升级.(M端5.5,S端5.6,S端转换成M,将原M端升级成5.6然后挂载到5.6的M端)
5、master和slave的工作原理:
如图1:
master更新数据,写binlog;
slave在master端注册一个i/o thread进程,截取binlog日志的变更。
i/o thread接入日志变更之后写入到本地的relay log里。
然后通过sql thread到relay log里进行解析复制到slave端。
在解析过程中会判断是否有主键,如果没有在判断是否有二级索引,如果没有就进行全表扫描。
6、判断主从同步的地址段参数:
判断日志参数:
master_log_file:
relay_master_log_file:
判断地址参数:
read_master_log_pos:
exec_master_log_pos:
-------------------------------------------------------------------------------
(二)、半同步复制:
1、概念与作用
在默认情况下,mysql复制功能是异步的,异步复制可以提供最佳性能。当主库把binlog日志发送给从库,这一动作就结束了,并不会验证从库是否接收到,或者接受完毕。这不仅带来了很高的风险,同时也意味着当master或者slave发证故障时,有可能slave端没有接收到主机发送过来的binlog日志,最终导致master/slave的数据不一致,甚至在恢复时造成数据丢失。
为了解决上述问题,mysql5.5引入了一种半同步复制模式,该模式可以确保slave端接收完master端发送的binlog日志文件写入自己的中继日志relay log里,然后会给master端一个ack。告诉对方已经接收完毕。这时master的线程才返回给当前session告知操作完成。
2、注意事项:
a、当出现超时的情况时,源主服务器会暂时切换到异步复制模式,直到至少有一台设置为半同步复制模式的slave端及时收到信息为止。
b、半同步复制模式必须在主服务器和从服务器端同时启用,否则主服务器默认使用异步复制模式。
c、slave在接收到二进制日志后会通过i/o_thread给master端一个ack。但是他并不会管relay-log中的sql_thread进程是否执行完。
3、特点:
半同步复制的目的是保证主从数据的一致性,等待返回的时间长短决定了数据库的更新速度。
优点:保证主从数据一致性。
缺点:更新、插入、删除的速度要比传统的异步复制稍慢一些,因为多了一个ACK的步骤。
尤其是在网络受到波动的情况下,如丢包、ping延时,半同步复制和异步复制就会切来切去,也会导致主库的更新、插入、删除操作受到影响。
4、原理图:
-------------------------------------------------------------------------------
(三)、完全同步复制:
由于半同步的这种弊端,在生产环境里一般用到的很少,但是为了保证节点之间的数据一致性。可以采用完全同步的方式-----PXC架构。
1、概念:
PXC在数据commit的时候需像其他主机成全进行确认,当有多个主机成员返回ACK时才可以commit数据。一般主句数量与返回ACK的数量如下:
5个节点,有三个节点回复。
3个节点,有一个节点回复。
2、特点:
对于数据库的数据一致性很高的场景。
PXC解决的是数据一致性的问题,而不是存储结构的问题。
几个节点可以跑同一个业务结构。同时下面也可以挂在slave端。
有些类似于oracle的rac功能,实现并发负载。只是没有共享存储,一般oracle转mysql用途比较多些。
3、工作原理:
a、在PXC集群中第一个节点会以mysql --wsrep_cluster_address=gcomm://192.168.100.200这种方式启动。其他节点会以/etc/init.d/mysql start的方式启动。
b、当第二个节点加入PXC集群后,会连接到node1上去请求数据,并查看GTID的节点。如果所有GTID的节点与新加入的节点不一致,就会通过全量(SST)的方式去同步所有节点的数据。此时提供node1数据提供住就被称为donor。
c、donor角色在同步数据前的时候会做一次SST的备份,此时备份过程中donor节点性能会变得非常差。因此,在跑PXC的服务器不要使用多实例。如果集群是能够在控制范围内的化,可以指定一个donor的主机进行数据同步,当节点传输完后直接删除参数即可。
参数如下:
vi /etc/my.cnf
wsrep_sst_donor=节点名
http://www.cnblogs.com/abobo/p/4239220.html
关于mysql主从复制的概述与分类(转)的更多相关文章
- 关于mysql主从复制的概述与分类
一.概述: 按照MySQL的同步复制特点,大体上可以分为三种类别: 1.异步复制: 2.半同步复制: 3.完全同步的复制: -------------------------------------- ...
- mysql之 MySQL 主从复制概述
1 .主从复制简介MySQL 主从复制就是将一个 MySQL 实例(Master)中的数据实时复制到另一个 MySQL 实例(slave)中,而且这个复制是一个异步复制的过程.实现整个复制操作主要由三 ...
- mysql主从复制(半同步方式)
mysql主从复制(半同步方式) 博客分类: MySQL mysqlreplication复制 一.半同步复制原理介绍 1. 优点 当事务返回客户端成功后,则日志一定在至少两台主机上存在. MySQ ...
- 30.Mysql主从复制、读写分离
Mysql主从复制.读写分离 目录 Mysql主从复制.读写分离 读写分离 读写分离概述 为什么要读写分离 什么时候要读写分离 主从复制与读写分离 mysql支持的复制类型 主从复制的工作过程 初始环 ...
- MySQL主从复制原理及配置详细过程以及主从复制集群自动化部署的实现
一.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...
- Mysql主从复制原理及配置
Mysql主从复制原理及配置 1.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其 ...
- mysql主从复制-读写分离-原理
Mysql主从复制和读写分离 在实际的生产环境中,如果对mysql数据库的读和写都在一台数据库服务器中操作,无论是在安全性.高可用性,还是高并发等各个方面都是不能满足实际需求的.因此,一般通过主从复制 ...
- mysql主从复制以及读写分离
之前我们已经对LNMP平台的Nginx做过了负载均衡以及高可用的部署,今天我们就通过一些技术来提升数据的高可用以及数据库性能的提升. 一.mysql主从复制 首先我们先来看一下主从复制能够解决什么问题 ...
- 在线建立或重做mysql主从复制架构方法(传统模式和GTID模式)【转】
mysql主从复制架构,是mysql数据库主要特色之一,绝大多数公司都有用到. 而GTID模式是基于事务的复制模式的意思,发展到现在也是越来越多人用. 以前很多文章,介绍搭建mysql主从复制架构,是 ...
随机推荐
- HDU--杭电--4504--威威猫系列故事——篮球梦--DP
威威猫系列故事——篮球梦 Time Limit: 300/100 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total ...
- Win7和VS2013上使用Intel的TBB
源地址:http://www.th7.cn/system/win/201505/103966.shtml http://wenku.baidu.com/link?url=zH7vwmWltWF5R-9 ...
- Eclipse插件引入jar包的方法
搞了两天,终于找到解决办法了.原来 Eclipse 插件项目引入外面的jar包不能用 build path---->add external jars的方法. 先说明两个概念:类加载器,O ...
- Git中的merge命令实现和工作方式
想象一下有例如以下情形:代码库中存在两个分支,而且每一个分支都进行了改动.最后你想要将当中的一个分支合并到其它的分支中.个人博客网址 http://swinghu.github.com/ 那么要问合并 ...
- 找工作笔试面试那些事儿(8)---常问的CC++基础题
这一部分是C/C++程序员在面试的时候会被问到的一些题目的汇总.来源于基本笔试面试书籍,可能有一部分题比较老,但是这也算是基础中的基础,就归纳归纳放上来了.大牛们看到一笑而过就好,普通人看看要是能补上 ...
- Java 泛型具体解释
在Java SE1.5中.添加了一个新的特性:泛型(日本语中的总称型).何谓泛型呢?通俗的说.就是泛泛的指定对象所操作的类型.而不像常规方式一样使用某种固定的类型去指定. 泛型的本质就是将所操作的数据 ...
- fopen()惹的祸
读一个文件,刚开始只读“r” 打开,读数据,刚开始的一段数据还好,但只读了一小部分就读不到正确的数据了,后来反复的看自己的代码,比对文件的内容,纠结了一天了都,感觉什么都没写错啊.心里总认为是这个文 ...
- Jquery插件placeholder的用法
闲的蛋疼,演示一下Jquery插件placeholder的用法,借助该插件能够轻松实现HTML5中placeholder特效: 效果图: 实现代码: <%@ page language=&quo ...
- veridata实验举例(6)验证agent启动先后顺序是否对捕获update操作有影响
veridata实验举例(6)验证agent启动先后顺序是否对捕获update操作有影响 续接veridata实验系列 上篇:"veridata实验举例(5)改动主键上的列值.update ...
- 有关信息ACM/ICPC竞争环境GCC/G++叠插件研究记录的扩展
0.起因 有时.DFS总是比BFS受人喜爱--毕竟DFS简单粗暴,更,而有些东西BFS不要启动,DFS它似乎是一个可行的选择-- 但是有一个问题,DFS默认直接写入到系统堆栈.系统堆栈和足够浅,此时O ...