前言
在上一篇MySQL主从复制(一)——实战文章中,我们简单的提了一下它的实现原理,随后即开始了其相关的实现实战内容。在本篇文章中,我们主要详细了解数据库主从复制的实现原理以及其在同步过程中存在的时延问题。
1. 主从复制的形式
一主一从
主主复制
一主多从:扩展系统读取的性能,因为读是在从库读取的;
多主一从:MySQL5.7开始支持;
联级复制
2. 主从复制实现原理
主从复制原理图
简单来讲,其过程为
主库的任何数据更改都会被记录到二进制日志(binlog)中;
从库生成两个线程,一个I/O线程,一个SQL线程;
I/O线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 I/O线程传binlog;
SQL 线程,会读取relay log文件中的日志,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db,来实现主从的操作一致,而最终数据一致;
我们可以发现从库同步主库数据的过程是串行化的,也就是说主库上并行的操作,在从库上会串行执行,由于从库从主库拷贝日志以及串行执行 SQL 的特点,在高并发场景下