news 2026/7/22 15:53:01

浅谈 MySQL 主从复制,优点?原理?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
浅谈 MySQL 主从复制,优点?原理?

目录

一. 主从复制概述

二. 主从复制有什么优点?

三. 主从复制的原理

四. 数据一致性问题

4.1 同步复制

4.2 异步复制

4.3 半同步复制


一. 主从复制概述

既然是主从复制,那么至少就应该有两台服务器,一台作为主库(Master),一台作为从库(Slave)。

主数据库会将自己的DDL(数据定于语言,例如建库建表)与DML(数据操作语言,例如增删改查)操作写成二进制日志文件,发送给从库,从库在接收到二进制日志文件之后,自己在将文件中的命令执行一遍(也叫重做),将数据备份保存到自己的服务器内部,从而使自己的数据与主库的数据保持一致。

同时,主库可以挂载多个从库,向多台数据库服务器发送数据文件;此外,从库也可以作为其他数据库的主库,实现链式复制。

二. 主从复制有什么优点?

(1)实现读写分离,主库主要用于做增删改操作,从库大量用于查询操作,降低了主库查询数据的访问压力;

(2)当主库出现故障或者宕机无法立刻恢复时,可以迅速切换到从库继续对外提供服务,保证业务不受到影响;

(3)当执行备份数据操作时,因为备份数据库会加全局锁,会进入只读状态,导致增删改操作阻塞。所以可以将备份数据操作交给从库去做,只让一个从库加上全局锁,主库继续对外服务,仍然可以进行增删改查所有操作,避免主库备份数据加锁阻塞对业务产生影响;

三. 主从复制的原理

MySQL 主从复制的核心就是根据二进制日志来完成的,大致可以分为以下三步

(1)当 Master主库执行了增删改或者DDL(数据定义语言)操作之后,主库就会将所有的数据变更写入到二进制日志 binlog 文件中;

(2)然后,当从库想要同步主库的数据时,主库的二进制日志转储线程会将二进制日志文件的内容发送给 slave从库,在读取发送二进制日志文件的过程中,binlog 文件会加锁,读取完毕之后会释放锁。slave 从库中的 IOThread 线程就会读取主库二进制日志文件 binlog 中的内容,读取之后会将文件内的所有内容写入到自己的中继日志文件中;

(3)写入中继日志完毕后,slave 从库中的另一个线程 SQLThread 会读取刚才的中继日志文件中的内容并在自己的服务器中执行一遍,从而保证了从库数据与主库数据的一致性;

四. 数据一致性问题

在MySQL中,主要有三种方法用于处理主库与从库的数据一致性问题

4.1 同步复制

主库将自己做的更新写入 Binlog 日志文件后,会等待数据更新同步复制到从库中,并且已经在从库执行成功,然后才能返回继续处理其它的请求。

同步复制提供了最佳安全性,保证数据安全,数据不会丢失;

缺点是对性能有一定的影响,因为要等待从库的同步响应结果,响应期间无法做其他写入操作;

4.2 异步复制

主库将自己最新作的操作或事务写入到 binlog 二进制日志文件之后,不需要等待数据更新是否已经到达从库,直接就可以继续处理外部的请求,也就是说主库不知道从库何时会接收 binlog 文件并同步数据,自己只负责将操作写入 biblog 文件。

异步复制优点是提高了主库的写入能力,能处理更多的请求;

缺点是如果主库宕机并且主库提交的事务尚未提交至从库,那么新上位的主库就会丢失之前已经提交过的事务。

4.3 半同步复制

半同步复制就是对同步复制与异步复制的一个折中方案,当从库做了数据更新之后,需要等待至少有一台从库已经读取到数据并写入到了自己的中继日志中,只要得到一台从库的响应,就可以结束等待继续处理其他请求;等待从库响应数量在MySQL5.7版本以后可以在配置文件中配置,可以配置至少一台,两台或多台。如果数量较大,也会有一定的性能缺失,如果数量较少,数据同步效果不是很大,实际工作需要折中考虑。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/22 15:51:48

虚拟线程如何用“同步代码”血洗百万并发?

虚拟线程如何用“同步代码”血洗百万并发? 文章目录虚拟线程如何用“同步代码”血洗百万并发?一、传统并发模型的痛点与瓶颈二、直击灵魂:虚拟线程到底是个啥?三、硬核对决:传统线程池 vs 虚拟线程传统线程池方式&…

作者头像 李华
网站建设 2026/7/22 15:50:34

TM4C129X以太网PHY寄存器深度解析:从基础配置到高级调试实践

1. 以太网PHY配置寄存器:从基础到TM4C129X的深度实践搞嵌入式网络开发,尤其是用到以太网接口,PHY芯片的配置绝对是个绕不开的坎。很多工程师习惯直接用厂商的驱动库,初始化函数一调,能ping通就万事大吉。但一旦遇到网络…

作者头像 李华
网站建设 2026/7/22 15:49:18

MyBatis核心流程以及工作原理

MyBatis核心对象 根据以下这四大核心对象,我们就能理清MyBatis的工作原理。 SqlSession对象,该对象中包含了执行SQL语句的所有方法。类似于JDBC里面的Connection。 Executor接口,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句&…

作者头像 李华
网站建设 2026/7/22 15:45:06

金属加工核心人才留不住?北京华恒智信薪酬优化成功案例

【客户行业】生产制造行业【问题类型】薪酬改革【客户背景及现状】某大型金属加工公司隶属于大型央企集团,至今成立已有60余年。公司主导业务是进行某有色金属的生产加工,其产品广泛应用于电子通讯、轨道交通、航空航天、国防军工、船舶制造等高端领域&a…

作者头像 李华
网站建设 2026/7/22 15:42:22

AI提效秘籍:如何让员工效率提升真正为组织赋能,附收藏攻略!

本文探讨了企业内部AI使用调研发现的问题:员工个人效率提升并未转化为组织效率提升。分析了原因在于个人与组织效率目标不同,以及企业未能建立有效的“人效飞轮”机制。提出了解决方案:引导员工将AI节省的时间用于高价值工作,实现…

作者头像 李华