1、三个线程
实际上主从同步的原理就是基于binlog进行数据同步的。在主从复制过程中,会基于3个线程来操作,一个主库线程,两个从库线程。
二进制日志转储线程(Binlog dump thread):
是一个主库线程。当从库线程连接的时候, 主库可以将二进制日志发送给从库,当主库读取事件(Event)的时候,会在 Binlog 上加锁,读取完成之后,再将锁释放掉。
从库 I/O 线程:
会连接到主库,向主库发送请求更新 Binlog。这时从库的 I/O 线程就可以读取到主库的二进制日志转储线程发送的 Binlog 更新部分,并且拷贝到本地的中继日志 (Relay log)。
从库 SQL 线程:
会读取从库中的中继日志,并且执行日志中的事件,将从库中的数据与主库保持同步。
2、复制三步骤
步骤1:Master将写操作记录到二进制日志(binlog)。这些记录叫做二进制日志事件(binary log events);
步骤2:Slave 将 Master 的 binary log events 拷贝到它的中继日志(relay log);
步骤3:Slave重做中继日志中的事件,将改变应用到自己的数据库中。 MySQL复制是异步的且是串行化的,而且重启后从接入点开始复制。
串行化:对象通过描述自己状态的数值,来记录自己,这个过程叫串行化
复制存在的问题:
那就是 “ 延时 ”,因为写的时候是写入主库,而查询的的时候是查从库,进行同步是需要时间的,所以就可能出现问题
复制的基本原则:
- 每个Slave只有一个Master
- 每个Slave只能有一个唯一的服务器ID
- 每个Master可以有多个Slave
一主一从架构搭建
一台主机 用于处理所有写请求,一台从机负责所有读请求: