一、缘由
最近在研究MySQL的复制及各种高可用架构,发现基本都是基于主从复制的组合。而主从复制是基于binary log的,
故这里就详细介绍下基于binary log event(二进制日志事件)复制的原理。
主从复制有实现两种方法:传统复制方式(基于server_id)和GTID(全局事务ID)。(MySQL5.6以后支持)
二、原理详解
1.简单来说(三个线程三个步骤):
1)主服务器Master将数据库的改变写入二进制日志文件,并维护一个等待从服务器连接的线程binlog_dump;
2)从服务器Slave会启动一个线程(IO Thread)和主服务器Master的binlog_dump线程建立连接,然后将数据
读取到从服务器Slave,并写入中继日志(Relay log);
3)从服务器Slave另一个线程(SQL thread)会从中继日志中读取数据,并在从数据库应用更新,完成数据同步。
2.细节实现:
MySQL使用3个线程来执行复制功能(一个在主服务器,两个在从服务器)。
1)当从服务器发出start slave时,从服务器Slave创建一个I/0线程,去连接主服务器Master并让他发送记录在其二进制日志中的语句。
2)主服务器Master创建一个线程Binlog Dump将二进制日志中的内容发送到从服务器Slave。(可在show processlist中看到