首页 > 代码库 > MySQL主从复制原理

MySQL主从复制原理

MySQL主从复制原理


    MySQL的主从复制是一个异步的复制过程,数据将从一个MySQL数据库复制到另一个MySQL数据库,在master与slave之间实现整个主从复制的过程是由三个线程参与完成的。其中有两个线程(SQL线程和I/O线程)在slave端,另一个线程(I/O线程)在master端。

  要实现MySQL的主从复制,首先必须打开master端的binlog记录功能,否则就无法实现。因为整个复制过程实际上就是slave从master端获取binlog日志,然后再在slave上以相同顺序执行获取的binlog日志中所记录的各种SQL操作。

 要打开MySQL的binlog记录功能,可通过在MySQL的配置文件my.cnf中的mysqld模块增加“log-bin”参数选项来实现,具体信息如下:

[mysqld]
log-bin = /data/3306/mysql-bin

技术分享

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


1)在slave服务器上执行start slave命令开启主从复制开关,开始进行主从复制。

2)此时,slave服务器的I/O进程会通过在master上已经授权的复制用户权限请求连接master服务器,并请求从指定binlog日志文件的指定位置(日志文件名和位置就是在配置主从复制服务时执行change master命令指定的)之后开始发送binlog日志内容。

3)master服务器接受到来自slave服务器的I/O线程的请求后,其上负责复制的I/O线程会根据slave服务器的I/O线程请求的信息分批读取指定binlog日志文件指定位置之后的binlog日志信息,然后返回给slave端的I/O线程。返回的信息中除了binlog日志内容外,还有在master服务器端记录的新的binlog文件名称,以及在新的binlog中的下一个指定更新位置。

4)当slave服务器的I/O线程获取到master服务器上I/O线程发送的日志内容、日志文件及位置点后,会将binlog日志内容依次写到slave端自身的relay log(即中继日志)文件(MySQL-relay-bin.xxxxxx)的最末端,并将新的binlog文件名和位置记录到master-info文件中,以便下次读取master端新binlog日志时能够告诉master服务器从新binlog日志的指定文件及位置开始请求新的binlog日志内容。

5)slave服务器端的SQL线程会实时检测本地relay log中I/O线程新增加的日志内容,然后及时地把relay log文件中的内容解析成SQL语句,并在自身slave服务器上按解析SQL语句的位置顺序执行应用这些SQL语句,并在relay-log.info中记录当前应用中继日志的文件名及位置点。


MySQL主从复制原理总结:


◆主从复制是异步的逻辑的SQL语句级的复制。

◆复制时,主库有一个I/O线程,从库有两个线程,即I/O和SQL线程。

◆实现主从复制的必要条件是主库要开启记录binlog功能。

◆作为复制的所有MySQL节点的server-id都不能相同。

◆binlog文件只记录对数据库有更改的SQL语句(来自主数据库内容的变更),不记录任何查询(select、show)语句。


















本文出自 “小新” 博客,请务必保留此出处http://zhanghongxin.blog.51cto.com/11255031/1847422

MySQL主从复制原理