千家信息网

MySQL 中主从复制的原理是什么

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,MySQL 中主从复制的原理是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。如何实现 MySQL 的读写分离?其实很简单,就是基
千家信息网最后更新 2025年12月01日MySQL 中主从复制的原理是什么

MySQL 中主从复制的原理是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

如何实现 MySQL 的读写分离?

其实很简单,就是基于主从复制架构,简单来说,就搞一个主库,挂多个从库,然后我们就单单只是写主库,然后主库会自动把数据给同步到从库上去。

MySQL 主从复制原理的是啥?

主库将变更写入 binlog 日志,然后从库连接到主库之后,从库有一个 IO 线程,将主库的 binlog 日志拷贝到自己本地,写入一个 relay 中继日志中。接着从库中有一个 SQL 线程会从中继日志读取 binlog,然后执行 binlog 日志中的内容,也就是在自己本地再次执行一遍 SQL,这样就可以保证自己跟主库的数据是一样的。

这里有一个非常重要的一点,就是从库同步主库数据的过程是串行化的,也就是说主库上并行的操作,在从库上会串行执行。所以这就是一个非常重要的点了,由于从库从主库拷贝日志以及串行执行 SQL 的特点,在高并发场景下,从库的数据一定会比主库慢一些,是有延时的。所以经常出现,刚写入主库的数据可能是读不到的,要过几十毫秒,甚至几百毫秒才能读取到。

而且这里还有另外一个问题,就是如果主库突然宕机,然后恰好数据还没同步到从库,那么有些数据可能在从库上是没有的,有些数据可能就丢失了。

所以 MySQL 实际上在这一块有两个机制,一个是半同步复制,用来解决主库数据丢失问题;一个是并行复制,用来解决主从同步延时问题。

这个所谓半同步复制,也叫 semi-sync 复制,指的就是主库写入 binlog 日志之后,就会将强制此时立即将数据同步到从库,从库将日志写入自己本地的 relay log 之后,接着会返回一个 ack 给主库,主库接收到至少一个从库的 ack 之后才会认为写操作完成了。

所谓并行复制,指的是从库开启多个线程,并行读取 relay log 中不同库的日志,然后并行重放不同库的日志,这是库级别的并行。

MySQL 主从同步延时问题(精华)

以前线上确实处理过因为主从同步延时问题而导致的线上的 bug,属于小型的生产事故。

是这个么场景。有个同学是这样写代码逻辑的。先插入一条数据,再把它查出来,然后更新这条数据。在生产环境高峰期,写并发达到了 2000/s,这个时候,主从复制延时大概是在小几十毫秒。线上会发现,每天总有那么一些数据,我们期望更新一些重要的数据状态,但在高峰期时候却没更新。用户跟客服反馈,而客服就会反馈给我们。

我们通过 MySQL 命令:

show status

查看 Seconds_Behind_Master,可以看到从库复制主库的数据落后了几 ms。

一般来说,如果主从延迟较为严重,有以下解决方案:

  • 分库,将一个主库拆分为多个主库,每个主库的写并发就减少了几倍,此时主从延迟可以忽略不计。

  • 打开 MySQL 支持的并行复制,多个库并行复制。如果说某个库的写入并发就是特别高,单库写并发达到了 2000/s,并行复制还是没意义。

  • 重写代码,写代码的同学,要慎重,插入数据时立马查询可能查不到。

  • 如果确实是存在必须先插入,立马要求就查询到,然后立马就要反过来执行一些操作,对这个查询设置直连主库。不推荐这种方法,你要是这么搞,读写分离的意义就丧失了。

分布式事务系列:

Spring 分布式事务实现概览

REST微服务的分布式事务实现-使用Spring Cloud的fallback模式

Spring的分布式事务实现-使用和不使用XA

REST微服务的分布式事务实现-基于消息中间件

REST微服务的分布式事务实现-分布式系统、事务以及JTA介绍

某宝布式事务架构设计

大白话聊聊分布式事务

分布式事务解决方案

消息队列系列:

为什么使用消息队列?

如何保证消息队列的高可用?

如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性?

如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?

如何保证消息的顺序性?

如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?

分库分表系列:

为什么要分库分表?

如何设计才可以让系统从未分库分表动态切换到分库分表上?

如何设计可以动态扩容缩容的分库分表方案?

分库分表之后,id 主键如何处理?

关于MySQL 中主从复制的原理是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

数据 消息 主从 事务 日志 问题 分布式 同步 分库 分表 保证 就是 队列 多个 原理 重要 代码 方案 线程 更新 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发技术主管待遇 inux服务器优缺点 数据库什么情况下会更新失败 未来10年软件开发方向 网络技术要数学好吗 长春智能网络技术有哪些 广州服务器电源价钱多少 百度云网站服务器价格 国家网络安全法宣传日是多会 一部讲软件开发的电视剧 手动添加网络安全类型 建行软件开发中心 厦门 古交软件开发哪家值得信赖 内蒙古每居互联网科技 红包网络安全自查 什么叫数据库逻辑隔离 什么情况下玩游戏需要服务器 连云港服务器精密空调清洗 微晟互联网科技有限公司地址 王牌竞速找回服务器 办公现场网络安全检查 黑龙江亿林网络技术 当今网络安全面临的形势 电脑浏览器代理服务器设置 苹果六手机服务器暂停怎么回事 服务器安全和通讯信道安全 何为数据库安全性 系统管理找不到请求的服务器 软件开发与测试工资高吗 梦幻新诛仙再续前缘服务器
0