mysql主从复制原理:
1.主库会创建一个log dump 线程,用来给产生binlog 数据
2.从库会生成两个线程(一个读取binlog数据的IO线程,一个执行relay log操作的SQL线程)
IO线程:从主库中读取binlog数据存储到从库的relaylog中。
SQL线程:解析relaylog中的操作,并在从库中执行操作实现数据主从数据同步
主库会生成一个 log dump 线程,用来给从库 I/O 线程传 Binlog 数据。
从库的 I/O 线程会去请求主库的 Binlog,并将得到的 Binlog 写到本地的 relay log (中继日志)文件中。
SQL 线程,会读取 relay log 文件中的日志,并解析成 SQL 语句逐一执行。
主节点 log dump 线程
当从节点连接主节点时,主节点会为其创建一个 log dump 线程,用于发送和读取 Binlog 的内容。在读取 Binlog 中的操作时,log dump 线程会对主节点上的 Binlog 加锁;当读取完成发送给从节点之前,锁会被释放。 主节点会为自己的每一个从节点创建一个 log dump 线程 。
从节点I/O线程
当从节点上执行 start slave
命令之后,从节点会创建一个 I/O 线程用来连接主节点,请求主库中更新的Binlog。I/O 线程接收到主节点的 log dump 进程发来的更新之后,保存在本地 relay-log(中继日志)中。
relay log
这里又引申出一个新的日志概念。MySQL 进行主主复制或主从复制的时候会在要复制的服务器下面产生相应的 relay log。
relay log 是怎么产生的呢?
从服务器 I/O 线程将主服务器的 Binlog 日志读取过来,解析到各类 Events 之后记录到从服务器本地文件,这个文件就被称为 relay log。然后 SQL 线程会读取 relay log 日志的内容并应用到从服务器,从而使从服务器和主服务器的数据保持一致。中继日志充当缓冲区,这样 master 就不必等待 slave 执行完成才发送下一个事件。
relay log 相关参数查询:
https://www.cnblogs.com/zouhong/p/16171808.html