首页 > 编程知识 正文

mysql的主从同步原理是什么,MySQL主从复制搭建

时间:2023-05-04 10:43:45 阅读:21644 作者:3527

为什么要将主从机复制到业务复杂的系统,是因为有需要锁定表的sql语句,如果读取服务暂时不可用,就会影响正在运行的业务。 使用主从机进行复制,写入主程序库,让其负责从程序库进行读取,从而即使在主程序库中出现将表锁定的情况,读取从机也能保证业务的正常执行。 作为数据的热备盘,在主库停机后,可以立即更换主库以确保业务可用性。 体系结构扩展。 业务量增加,I/O访问频率过高,单个无法满足。 在这种情况下,创建多库存储,降低磁盘I/O访问频率,提高各个计算机的I/O性能。 MySQL主从复制流程

主库db更新事件(update、insert、delete )写入binlog主库以创建binlog dump thread,然后从库中启动binlog的内容以开始连接,再连接主库注意:创建SQL线程以读取从主库传递的binlog,从relay log读取内容,执行从Exec_Master_Log_Pos位置读取的更新事件,并将更新写入slave的db

MySQL主从复制原理MySQL主从复制是一个异步复制过程,主库将更新事件发送到从库,从库中读取更新记录,从库

binlog:binary log,将所有更新的事件日志保存到主库中的二进制文件。 binlog是一个文件,用于存储数据库的所有更改记录(数据库结构和内容),自数据库服务启动以来。 在主库中,每次发生更新事件时,它都会顺序写入binlog,并作为要从库中复制的数据源从库中推送。

binlog输出线程:每次从库连接到主库时,主库都会创建线程并从库中发送binlog内容。 每个发送到从库的sql事件都将锁定binlog输出线程。 当线程读取事件时,它将解除锁定,即使事件已完全发送到从库,也会解除锁定。

在库中,当复制启动时,库将创建库I/O线程和库的SQL线程,并进行复制处理。

从库I/O线程:在从库中执行START SLAVE语句后,从库创建I/O线程。 此线程连接到主库,并请求主库将binlog中的更新记录发送到子库。 从库I/O线程读取主库binlog输出线程发送的更新,并将其复制到包含relay log文件的本地文件中。

从库的SQL线程—读取从库I/O线程写入relay log的更新事件,并通过库创建要执行的SQL线程。

从以上情况可以看出。

每个主从复制连接都有三个线程。 具有多个从库的主库为连接到主库的每个从库创建binlog输出线程。 每个从库都有自己的I/O线程和SQL线程。

通过从库中创建两个独立的线程,在复制时将从库中读取和写入分开。 因此,负责执行的线程执行得慢,负责读取更新语句的线程不会变慢。 例如,如果暂时不从库中运行,则在此启动时,I/O线程可以快速从主库中读取所有binlog内容,尽管SQL线程运行缓慢。 这样,即使I/O线程在执行所有加载了SQL线程的语句之前都已从库停止,I/O线程也至少会完全读取所有内容,安全地从库备份到本地relay log,并随时从库继续

参考:https://www.hoohack.me/2017/07/11/learning-mysql-replication-detail

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。