mysql AB复制理论

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

 

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

实现整个主从复制须要由Master上的IO进程,和Slave上的sql进程和IO进程共同完成。首先打开Master上的 binary log (bin-log)功能(修改配置文件),由于整个复制实际就是slavemaster端获取相应的二进制日志,而后在slave端按顺序执行日志中的各类操做。(二进制日志几乎记录了除select外全部的sql语句的操做)数据库

基本过程:服务器

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

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

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

(4)Slave sql进程检测到relay-log中新增长了内容后,会立刻解析其中的内容,转变为执行的sql语句,并在slave端执行。负载均衡


注意当你进行复制时,全部对复制中的表的更新必须在主服务器上进行(读写分离)。不然,你必需要当心,以免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。异步

 

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

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

从服务器做为份。

· 经过在主服务器和从服务器之间切分处理客户查询的负荷,能够获得更好的

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

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

步。若是非更新查询为主,该负载均衡策略颇有效,但通常是更新查询。

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

器。在备份过程当中主服务器能够继续处理更新。

 

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

 

wKiom1e27FmSxAj9AAKUgKE3d6s421.png 

 

 

 

注意:在同步以前确保 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 中当前二进制日志和中继日志的信息。

 

wKioL1e27GzTcjYcAABYUJowjxY347.png 

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

 

wKioL1e27IKTSqmoAAGla74gPW8405.png

wKiom1e27I-S7THxAAFWOCHoVKA354.png 

 

 

 

Mysql5.6之后版本

 

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

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

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

 (2)方便了ReplicationFailover

 

 

Replication failover的操做过程

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

|_____________________|


 

 

A 的服务器宕机了,须要将业务切换到B 上,同时又须要将C的复制源改成B ,修改复制源很简单,(CHANGE MASTER TO MASTER_HOST=XXXMASTER_LOG_FILE=XXXMASTER_LOG_POS=XXX)难点在于,因为同一个事务在每台机器上的binlog名字和位置都不同,那么怎么找到C当前同步的中止点所对应Bmaster_log_filemaster_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是多线程的,支持并行操做

相关文章
相关标签/搜索