blob.png

   MySQL的主从复制方案,和scp/rsync等文件级别同步是类似的,都是数据的传输。只不过MySQL无需借助第三方工具,而是其自带的复制功能,有一点不同,MySQL的主从复制并不是数据库磁盘上的文件直接拷贝复制,而是通过逻辑的Binlog日志复制到同步的数据本地然后读取里面SQL语句应用到数据库的过程。

9.1MySQL主从复制介绍

    MySQL数据库支持单向、双向、链式级联等不同场景的复制。在复制过程中,一台服务充当那主服务器(Master),而一个或多个其它的服务器充当从服务器(Slave)。

    复制可以是单向:MèS,也可以是双向M<==>M,当然也可以多M环状同步等。

    如果设置了链式级联复制,那么,从(Slave)服务器本身除了充当从服务器外,也会同时充当其下面从服务器的主服务器。链式级联复制类似A à B à C à D的复制形式。

    单向主从复制逻辑图,此架构只能在Mastrt端进行数据写入。


image.png



 

环状级联单向多主从同步逻辑图,此架构只能在任意一个Master端进行数据写入。

image.png

image.png

 

 

MySQL主从复制原理介绍

   MySQL的主从复制是一个异步的复制过程(虽然一般情况下感觉是实时同步的),数据库数据从一个MySQL数据库(Master)复制到另一个MySQL数据库(Slave)。在MasterSlave之间实现整个主从复制的过程是由三个线程参与完成的。其中有两个线程(SQL线程和IO线程)在Slave端,另外一个线程(IO线程)在Master端。

    要实现MySQL的主从复制,首先必须打开Master端的BinlogMySQL-bin.xxxxxx)功能,否则就无法实现主从复制。因为整个复制过程实际上就是SlaveMaster端获取Binlog日志,然后再在Slave自身上以相同顺序执行获取的binglog日志中所记录的各种操作。

  打开MySQLbinlog可以通过在MySQL的配置文件my.cnfmysqld模块([mysqld]标识后的参数部分)增加”log-bin”参数选项。

小结

    1、同步的时候,从库有两个线程io,sql来完成,主库由一个io来完成

    2、在从库上配置连接到主库的IP,用户名,帐号,密码,连接文件的位置以及pos点,要把主库的数据先备到从库上,在主库备份的点就是从库需要的master的点。

    3、在开启开关之前,要确保文件位置点以前从库是有完整数据的。

    4、要在主库上建立专用于主库同步的帐号。

    5、主库要打开binlog开关,否则无法形成同步。

    6、从库打开开关的过程,实际上就从库2个线程工作的过程。

 

MySQL主从复制原理过程详细描述

    简单描述MySQL Replication的复制过程

1.Slave服务器上执行start slave,开启主从复制开关。

2.此时Slave服务器的IO线程会通过在Master上授权的复制用户权限请求连接Master服务器,并请求从指定Binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制服务是执行change master命令时指定的)之后发送binglog日志内容。

3.Master服务器接收到来自Slave服务器的IO线程的请求后,Master服务器上负责复制的IO线程根据Slave服务器的IO线程请求的信息读取指定Binlog日志文件指定位置之后的Binlog日志信息,然后返回给Slave端的IO线程。返回的信息中处理Binglog日志内容外,还有本次返回日志内容后在Master服务器端的新的Binlog文件名以及在Binlog中的下一个指定更新位置。

4.Slave服务器的IO线程获取到来自Master服务器上IO线程发送日志内容及日志文件及位置点后,将Binlog日志内容依次写入到Slave端自身的Relay Log(即中继日志)文件(MySQL-relay-bin.xxxxxx)的最末端,并将新的Binlog文件名和位置记录到master-info文件中,以便下一次读取Master端新Binlog日志能够告诉Master服务器需要从新Binlog日志的那个文件那个位置开始请求新的Binlog日志内容。

5.Slave服务器端的SQL线程会实时的检测本地Relay Log中新增加的日志内容,然后及时大把Log文件中的内容解析成在Master端曾经执行的SQL语句的内容,并在自身Slave服务器上按语句的顺序执行应用这些SQL语句,应用完毕后清理应用过的日志。

6.经过了上面的过程,就可以确保在Master端和Slave端执行了同样的SQL语句。当复制状态正常的情况下,Master端和Slave端的数据是完全一样的,MySQL的同步机制是有一些特殊的情况的,具体参考官方文档说明。

主从复制原理重点小结

1、主从复制是一步的、逻辑的SQL语句级的复制。

2、同步是,主库有一个IO线程,从库有两个线程,IOSQL线程。

3、实现主从复制的必要条件,主库要开启binlog功能。

4binlog文件只记录对数据库有更改的SQL语句(来自主数据库内容的变更)。