三十五、主从复制原理

涉及的文件

主库需要使用到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,增强了主从复制的实时性.

学习来自:B站课程:MySQL主从复制原理 P120-122

posted @ 2021-04-05 10:39  努力吧阿团  阅读(112)  评论(0编辑  收藏  举报