mysql AB复制理论

Mysql AB复制(主从复制)理论

MySQL 支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。即从Master复制到一个或多个Slave上。

实现整个主从复制需要由Master上的IO进程,和Slave上的sql进程和IO进程共同完成。首先打开Master上的 binary log (bin-log)功能(修改配置文件),因为整个复制实际就是slave从master端获取相应的二进制日志,然后在slave端按顺序执行日志中的各种操作。(二进制日志几乎记录了除select外所有的sql语句的操作)

基本过程:

(1)Slave端的IO进程连接到master,向master请求指定日志文件的指定位置之后的日志内容

(2)Master接收到Slave的IO进程请求后,根据请求信息,读取相应位置的二进制日志的内容,返回给Slave的IO进程。并将本次请求读取的二进制日志文件名及位置一起返回给Slave

(3)Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件中,并将读取到的Master的bin-log文件名和位置记录在master-info文件中,方便下次读取的时候能够清楚的告诉master从哪个位置往后的日志内容发给我

(4)Slave 的sql进程检测到relay-log中新增加了内容后,会马上解析其中的内容,转变为执行的sql语句,并在slave端执行。

注意:当你进行复制时,所有对复制中的表的更新必须在主服务器上进行(读写分离)。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

单向复制有利于健壮性、速度和系统管理:

· 主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到

从服务器作为份。

· 通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的

客户响应时间。SELECT查询可以发送到从服务器以降低主服务器的查询处理负

荷。但修改数据的语句仍然应发送到主服务器,以便主服务器和从服务器保持同

步。如果非更新查询为主,该负载均衡策略很有效,但一般是更新查询。

· 使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务

器。在备份过程中主服务器可以继续处理更新。

MySQL 提供了数据库的同步功能,这对我们实现数据库的冗灾、备份、恢复、负载均衡等都是有极大帮助

注意:在同步之前确保 master 与 slave 上的数据一致性。因为在数据同步过程中,是命令同步,即sql语句同步

相关文件作用:

1. mysql-bin.index:服务器一旦开启二进制日志,会产生一个与二日志文件同名,但是以.index 结尾的文件。它用于跟踪磁盘上存在哪些二进制日志文件。MySQL 用它来定位二进制日志文件。

2. mysqld-relay-bin.index:该文件的功能与 mysql-bin.index 类似,但是它是针对中继日志,而不是二进制日志。

3. master.info:保存 master 的相关信息。不要删除它,否则,slave 重启后不能连接 master。

4. relay-log.info:包含 slave 中当前二进制日志和中继日志的信息。

如果写操作较少,而读操作很多时,可以采取上图这种结构。你可以将读操作分布到其它的 slave,从而减小master 的压力。但是,当 slave 增加到一定数量时,slave 对 master 的负载以及网络带宽都会成为一个严重的问题。这种结构虽然简单,但是,它却非常灵活,足够满足大多数应用需求。当设置 log_slave_updates 时,你可以让 slave 扮演其它 slave 的 master。此时,slave 把 SQL 线程执行的事件写进行自己的二进制日志(binary log),然后,其它的 slave 可以获取这些事件并执行它,从而有效缓解master 的压力。如下:

Mysql5.6以后版本

GTID (global transaction ID)是一个已提交事务的编号,且是全局唯一编号

GTID实际是UUID+TID组成的。其中UUID是一个mysql实例的唯一标识。TID代表了该实例上已提交的事务数量,并且随着事务提交单调递增。

GTID功能:(1)可以知道事务最初是从哪个实例上提交的

(2)方便了Replication的Failover

Replication failover的操作过程

A————>B ----------->C

|_____________________|

若A 的服务器宕机了,需要将业务切换到B 上,同时又需要将C的复制源改为B ,修改复制源很简单,(CHANGE MASTER TO MASTER_HOST=XXX,MASTER_LOG_FILE=XXX,MASTER_LOG_POS=XXX)难点在于,由于同一个事务在每台机器上的binlog名字和位置都不一样,那么怎么找到C当前同步的停止点所对应B的master_log_file和master_log_pos是什么时候

由于同一事务的GTID在所有节点上的一致性,根据C当前停止的GTID就能唯一定位到B上的GTID。只需要知道IP,密码,端口就可以了,mysql会从内部的GTID自动找到同步点

多线程:支持多线程的复制,采用多个线程,每个线程处理不同的database,提高了并发性能,在一定程度上解决了slave延迟master并很难追上的问题

(延迟问题是当master宕机时,backup可能还未启动?)

slave-parallel-workers=16最多为16,=0则表示不开启多线程,=1则效率最低

备份:5.7新增加的数据库导出方法,用mysqlpump代替mysqldump,而mysqldump是单线程的,导出很慢;mysqlpump是多线程的,在社区版中mydumper是多线程的,支持并行操作

时间: 2024-10-26 19:57:21

mysql AB复制理论的相关文章

mysql AB复制

AB复制又称主从复制,实现的是数据同步.如果要做MySQL AB复制,数据库版本尽量保持一致.如果版本不一致,从服务器版本高于主服务器,但是版本不一致不能做双向复制.MySQL AB复制有什么好处呢?有两点,第一是解决宕机带来的数据不一致,因为MySQL AB复制可以实时备份数据:第二点是减轻数据库服务器压力,这点很容易想到,多台服务器的性能一般比单台要好.但是MySQL AB复制不适用于大数据量,如果是大数据环境,推荐使用集群. 然后我们来看看MySQL复制的 3 个主要步骤: 1)主服务器把

使用binlog日志, XtraBackup备份工具 ,MySQL AB复制

使用binlog日志 1.1 问题 利用binlog恢复库表,要求如下: 启用binlog日志 创建db1库tb1表,插入3条记录 删除tb1表中刚插入的3条记录 使用mysqlbinlog恢复删除的3条记录 1.2 步骤 实现此案例需要按照如下步骤进行. 步骤一:启用binlog日志 1)调整/etc/my.cnf配置,并重启服务 [[email protected] ~]# vim /etc/my.cnf [mysqld] .. .. log-bin-index=mysql-bin     

MySql ---- ab复制(主从复制)

ab复制(主从复制)可以让mysql实现:1.数据的备份(主服务器的数据全部同步到从服务器)2.可以负载均衡减小主服务器的压力3.真正实现mysql的读写分离 配置方法主服务器:1. 主服务器 my.cnf 配置cat /etc/my.cnf[mysqld]log-bin=mysql_binserver-id=1    不允许重复2. 授权,指定从服务器只能复制binlog,从服务器的ipgrant replication slave on *.* to 'slave'@'192.168.1.1

三、MySQL AB复制

环境:master   192.168.60.135slave    192.168.60.136MySQL版本:5.6OS:centOS6.5(最小化安装) MySQL安装:http://4708705.blog.51cto.com/4698705/1584073 原理:1.主库将更改记录到二进制日志中(bin-log)2.备库读取主库的bin-log日志,并复制到自己的中继日志(relay-log)  {#备库的I/O线程}3.备库读取中继日志(relay-log)中的事件,并恢复到备库  

MySQL5.7的AB复制以及 GTID多线程复制 配置

mysql AB复制: 三台主机:MASTER IP:172.25.35.21 SLAVE1 IP:172.25.35.22 SLAVE2 IP:172.25.35.19 MYSQL版本:mysql5.7 下载安装包 mysql-community-client-5.7.11-1.el6.x86_64.rpm mysql-community-common-5.7.11-1.el6.x86_64.rpm mysql-community-libs-5.7.11-1.el6.x86_64.rpm my

Mysql 异步复制

一:Mysql AB复制的原理:(异步复制)             1.MysqlAB 主机有三个线程相互联系mysql数据库,实施同步.Master主机(Binlog Dump线程):slave主机(IO线程与SQL线程).首先,由slave上执行startslave创建以个I/O线程,I/O线程链接到master上,并请求发送二进制日志文件里面的语句.Master创建一个线程(BinglogDump线程),slave创建一个I/O线程,读取master上的BinglogDump线程,将其拷

Mysql的ab复制

mysql复制在业界里有叫:mysql同步,ab复制等.专业名称就是叫:复制.复制是单向的异步复制,从一个Mysql(Master)复制到另一个Mysql(Slave).实现整个主从复制,需要由Master服务器上的IO进程,和Salve服务器上的Sql进程和IO进程共同完成. 要实现主从复制,首先必须打开Master端的二进制日志(bin-log)功能,因为整个Mysql复制过程实际上就是Slave从Master端获取相应的二进制日志文件,然后在根据相应的Position号在自己Slave端完

Mysql 主从复制(AB复制)

Mysql的主从复制又叫做AB复制,主要作用就是将主服务器上的数据及时复制到从服务器上,来实现数据的同步,这样做的好处有,在进行数据备份时,可以减轻主服务器的运行压力,另外即使主服务器宕机了,也能从从服务器上取得主服务器的数据,从而保证数据不会丢失.这对于一个企业来说是至关重要的.一般在实际生产环境中,由单台mysql作为独立的数据库是完全不能满足实际需要的,无论在安全性,高可用性以及高并发等方面,一般是通过主从复制(Master-Slave)的方式来同步数据,再通过keepalived组件或者

MYSQL 的 AB 复制(主从,双机热备)

MYSQL 的 AB 复制(主从,双机热备)     在实际的应用中,我们经常需要制作一个备份数据库.当我们的主数据库发生问题导致无法正常相应的时候,我们可以 把备用的从数据库街上来顶替主库,以达到不间断服务,热备的作用.在实际应用中从库和主库的数据必须同步,保持一致, 对主库的任何操作通要引发从库上的同样操作. 实现原理: 从库以一定的频率去读取主库的二进制日志文件,按照日志中记录对从库进行同样的操作,以达到同步效果. 注意版本影响: 实现双机的热备首先要了解主从数据库服务器的版本的需求.首先