三十五、主从复制原理
涉及的文件
主库需要使用到binlog文件
从库需要使用xxx-relay-bin.00000N、master.info、relay-log.info文件
下面讲解从库涉及到的3个文件
1、master.info
连接主库相关信息,已经接收到的binlog位置点信息,默认存放在文件中
存储位置:/usr/local/mysql/data/master.info
查看命令:mysql> show variables like '%master%';
提高性能:将master_info_repository参数由FILE改为TABLE,可以将这些信息存放在表中,即可提高性能
2、relaylog
中继日志,负责存储从主库接收到的binlog日志文件
存储位置:/usr/local/mysql/data/client2-relay-bin.00000N
查看命令:mysql> show variables like '%relay%';
查看relaylog事件,结合master.info文件可以判断同步是否完成
3、relay-log.info
从库会通过reloylog恢复主库数据,该文件记录已经恢复到reloylog哪里的位置点信息
存储位置:/usr/local/mysql/data/relay-log.info
查看命令:mysql> show variables like '%relay_log_info%';
提高性能:通过 relay_log_info_repository参数定义存放形式,放在表中可以提高性能
主从复制中涉及的线程
1、主库线程
只有一个线程,Binlog_Dump Thread
作用:用来接收从库的请求,并发送binlog给从库
查看命令:mysql> show processlist;
2、从库线程
有两个线程,分别为IO线程,SQL线程
SLAVE_IO_THREAD
用来请求日志,接收日志
SLAVE_SQL_THREAD
用来回放应用日志
主从复制工作过程
IO_THREAD 简称 IO_T
SQL_THREAD 简称 SQL_T
DUMP_THREAD 简称 DUMP_T
1、从库执行change master to 命令(记录主库的连接信息+复制的起点)
2、从库会将以上信息记录到master、info文件
3、从库执行start slave命令,立即开启IO_T和SQL_T线程
4、从库IO_T读取master、info文件中的信息,获取到IP、PORT、USER、PASS,BINLOG的位置信息
5、从库IO_T请求连接主库,主库专门提供一个DUMP_T,负责和IO_T交互
6、IO_T根据binlog的位置信息(log-bin、000005,704),请求主库新的binlog
7、主库通过DUMP_T将最新的binlog,通过网络传输给从库的IO_T
8、IO_T接收到新的binlog日志,存储到TCP/IP缓存,立即返回ACK给主库,并将binlog文件名以及下一个更新位置更新到master、info
9、IO_T线程将TCP/IP缓存中数据,写入到磁盘文件relaylog中
10、SQL_T线程读取relay、info中的信息,获取上次已经应用过的relaylog的位置信息
11、SQL_T会按照上次的位置点回放到最新的relaylog,将应用到的位置点信息更新到relay、info信息
12、从库会自动purge应用过relay进行定期清理
补充说明:
1、reloay_log_purge=ON
:开启该参数能定期清理应用过的relaylog
3、一旦主从复制构建成功,主库当中binlog发生了变化,都会通过dump_T发送信号给IO_T,增强了主从复制的实时性.