mysql主从是异步复制过程
master开启bin-log功能,日志文件用于记录数据库的读写增删
需要开启3个线程,master IO线程,slave开启 IO线程 SQL线程,
Slave 通过IO线程连接master,并且请求某个bin-log,position之后的内容。
MASTER服务器收到slave IO线程发来的日志请求信息,io线程去将bin-log内容,position返回给slave IO线程。
slave服务器收到bin-log日志内容,将bin-log日志内容写入relay-log中继日志,创建一个master.info的文件,该文件记录了master ip 用户名 密码 master bin-log名称,bin-log position。
slave端开启SQL线程,实时监控relay-log日志内容是否有更新,解析文件中的SQL语句,在slave数据库中去执行。
Binlog Dump线程:此线程运行在主库,当主从都配置好后,从库运行START SLAVE启动复制后,会在主库上生成一个BinlogDump线程,该线程的主要作用就是读取主库Binlog事件,然后发送到从库(从库的I/O线程)。
I/O线程:此线程运行在从库,作用是向主数据库要数据,并且将主库发送过来的变更事件写入到从库的中继日志中。
SQL线程:此线程运行在从库,主要作用是读取中继日志中的变更事件并更新从库。
详细流程如下:
主库验证从库发起的连接;
主库为从库开启一个线程;
从库将主库日志的偏移位告诉主库;
主库检查该值是否小于当前二进制日志偏移位。
如果小于,则通知从库可以取数据。
从库持续从主库取数据,直至取完,这时,从库线程进入睡眠,主库线程同时进入睡眠。
当主库有更新时,主库线程被激活,并将二进制日志推送给从库,并通知从库线程进入工作状态。
从库SQL线程执行二进制日志,随后进入睡眠状态。