Mysql主从复制原理:
1.Mysql支持单双向、链式级联、异步复制。可以一主一从,也可以一主多从。
2.链式级联中的从是下级从的主。类似A-->B-->C-->D。
3.主从复制配好后,数据库的更新必须在主服务器上进行,以免造成主从冲突。
4.主从服务器架构可实现对用户的请求实现读写分离。从处理用户的select,主处理update,insert,delete等更新。以此保持主从实时同步。
5.可以把从服务器根据业务来拆分。
6.mysql主从复制是异步复制。master与slave之间三个线程参与完成,其中两个线程(IO和SQL)在slave,另一个线程(IO)在master端。
7.首先必须打开master的Binlog(Mysql-bin.xxxxxx)功能,因为整个复制过程实际上就是slave从master端获取Binlog日志,然后在slave自身上以相同的顺序执行binlog日志中所记录的各种操作。
下面简单描述下mysql主从复制过程(Binlog中不包含select内容):
1.slave服务器上执行 start slave 开启主从复制开关。
2.此时。slave服务器的IO线程会通过在master上授权的复制用户请求连接master服务器,并请求从指定的Binlog日志文件的指定位置之后的Binlog的日志内容。
3.master服务器接收到来自slave服务器的IO线程的请求后,master服务器上负责复制的IO线程根据slave服务器的IO线程请求的信息读取指定Binlog日志文件的指定位置之后的Binlog的日志信息,然后返回给slave端的IO线程。返回信息除了日志内容外,还有本次返回的日志内容后在master服务器端的新的Binlog文件名称以及在Binlog中的指定位置。
4.当slave的IO线程收到来自master的IO线程发送的日志内容及日志文件及位置点后,将Binlog日志内容依次写入到slave自身的relaylog(中继日志)文件(mysql-relay-bin.xxxxxx)的最末端,并将新的Binlog文件名和位置记录到master-info文件中,以便下一次读取master的新Binlog日志时能够告诉master需要从新Binlog日志的那个文件哪个位置开始请求新的Binlog日志内容。
5.slave服务器的sql线程会实时的检测本地relay log 中新增加了日志内容,然后把这些内容解析成master曾经执行的sql语句,并在自身slave上按语句的顺序执行sql语句。
6.这样 就可以确保在master和slave执行了同样的sql语句。