参考文章:

mysql主从复制工作原理:
(1)    master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2)    slave请求master的binary log events并写到中继日志(relay log)中;
(3)    slave重做中继日志中新的事件

复制过程主要涉及到三个线程,两个线程(sql和IO线程)在slave服务器,另一个线程(IO)在master服务器

(1)在每个事务更新数据完成之前,master在二进制日志中记录这些改变,在事件写入二进制日志完成后,master通知存储引擎提交事务。

(2)slave的IO线程连接上master,并请求指定二进制日志文件的指定位置后的日志内容。初始时通过下面的命令来设置slave端请求的master端的日志和位置

mysql>change master to master_host='192.168.1.106', master_user='replication', master_password='000000', master_log_file='binlog.000006', master_log_pos=107;

(3)master接收到来自slave IO线程的请求后,通过负责复制的IO线程(master)读取请求的二进制日志文件指定位置后的日志信息,并返回给slave端的IO线程。返回的信息中除了日志内容还包含本次返回的信息在master端的binary log文件的名称和读取的位置

(4)slave的IO线程接到信息后,将接收的日志内容写入slave端的relay log(mysql-relay-bin.xxxxx)文件的末端,并将读取到的master的binary log的文件名和位置记录到master-info文件中,以便在下次向maser请求时,能够清楚的告诉maser “我需要哪个binary log的哪个位置后的日志内容,并发给我”

(5)slave的SQL线程检测到relay log中有新的内容后,马上解析该日志中的内容为,可执行的query语句,并在slave端执行这些query。从而使得slave端和master端的数据保持一致性