图文解说MySQL5.7.26主从数据库原理

图文解说MySQL5.7.26主从数据库原理
注:上图从以下第4步开始,如图中的4代表以下的第4步,以此类推。

主从复制工作(过程)原理
1.从库执行change master to 命令(主库的连接信息+复制的起点)

2.从库会将以上信息,记录到master.info文件

3.从库执行 start slave 命令,立即开启SLAVE_IO_THREADHREAD和SLAVE_SQL_THREADHREAD

4.从库SLAVE_IO_THREADHREAD,读取master.info文件中的信息,获取到IP,PORT,User,Pass,binlog的位置信息

5.从库SLAVE_IO_THREAD请求连接主库,主库专门提供一个Binlog_Dump Thread,负责和SLAVE_IO_THREAD交互

6.SLAVE_IO_THREAD根据binlog的位置信息(mysql-bin.000004 , 1030),请求主库新的binlog

7.主库通过Binlog_Dump Thread将最新的binlog,通过网络传输给从库的SLAVE_IO_THREAD

8.SLAVE_IO_THREAD接收到新的binlog日志,存储到TCP/IP缓存,立即返回ACK给主库,并更新master.info

9.SLAVE_IO_THREAD将TCP/IP缓存中数据,转储到磁盘relaylog中.

10.SLAVE_SQL_THREAD读取relaylog.info中的信息,获取到上次已经应用过的relaylog的位置信息

11.SLAVE_SQL_THREAD会按照上次的位置点回放最新的relaylog,再次更新relaylog.info信息

12.从库会自动purge应用过relay进行定期清理
补充说明:
一旦主从复制构建成功,主库当中发生了新的变化,都会通过Binlog_Dump Thread发送信号给SLAVE_IO_THREAD,增强了主从复制的实时性

relaylog ------------------中继日志
master.info --------------主库信息文件
relaylog.info -------------relaylog应用的信息

主从复制中涉及的线程
主库:
Binlog_Dump Thread
从库:
SLAVE_IO_THREAD
SLAVE_SQL_THREAD