暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL数据库主从同步原理

Tonyhacks 2023-08-21
298

MySQL数据库主从同步原理

image.png

(1) master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中;
(2) slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/O Thread请求master二进制事件。
(3)同时主节点为每个I/0线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的relaylog中,从节点将启动SQL线程从relaylog中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/OThread和SQLThread将进入唾眠状态,等待下一次被唤醒。

2日志3线程:

2日志

Binlog日志(二进制日志)
主从复制的基础:从服务器通过获取和解析主服务器上的Binlog日志,实现与主服务器的数据同步。

Relay Log(中继日志)
数据复制和同步:从服务器通过读取和解析中继日志中的事件,将主服务器上的数据变更操作应用到自己的数据库中,实现与主服务器的数据复制和同步。

3线程

  1. Dump线程

    • Dump线程是主服务器上的一个线程,负责将主服务器的数据快照(即数据库结构和初始数据)传输给从服务器。
    • 当从服务器进行初始同步时,Dump线程会从主服务器读取数据,并生成一个用于初始化从服务器的数据文件(通常是一个SQL文件)。
    • Dump线程在初始同步完成后就不再起作用。
  2. I/O线程

    • I/O线程是从服务器上的一个线程,负责与主服务器进行通信,获取主服务器上的二进制日志(binlog)事件。
    • I/O线程连接到主服务器,并请求获取主服务器上的二进制日志。
    • 当有新的二进制日志事件生成时,I/O线程会将其传输给从服务器,并存储在从服务器的中继日志(relay log)中。
  3. SQL线程

    • SQL线程也是从服务器上的一个线程,在从服务器上执行从主服务器接收到的二进制日志事件。
    • SQL线程从中继日志中读取二进制日志事件,并解析其中的数据变更操作。
    • SQL线程按照事件顺序,将数据变更操作应用到从服务器的数据库中,以保持与主服务器的数据一致性。

这3个线程的协同工作实现了完整的主从复制过程:

  • Dump线程在初始同步时从主服务器生成数据快照,I/O线程获取并传输主服务器的二进制日志事件到从服务器的中继日志,而SQL线程负责读取并执行这些事件,将数据变更同步到从服务器的数据库中。

这种分工和协作的方式,使得从服务器能够与主服务器保持数据的一致性,并实现实时的数据复制和同步。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论