Mysql主从同步的实现原理

发布时间 - 2026-01-11 00:09:05    点击率:

1、什么是mysql主从同步?

当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库。

2、主从同步有什么好处?

  • 水平扩展数据库的负载能力。
  • 容错,高可用。Failover(失败切换)/High Availability
  • 数据备份。

3、主从同步的原理是什么?

首先我们来了解master-slave的体系结构。

如下图:

不管是delete、update、insert,还是创建函数、存储过程,所有的操作都在master上。当master有操作的时候,slave会快速的接收到这些操作,从而做同步。

但是,这个机制是怎么实现的呢?

在master机器上,主从同步事件会被写到特殊的log文件中(binary-log);在slave机器上,slave读取主从同步事件,并根据读取的事件变化,在slave库上做相应的更改。

如此,就实现了主从同步了!

下面我们来详细的了解。

3.1主从同步事件有哪些

上面说到:

在master机器上,主从同步事件会被写到特殊的log文件中(binary-log);

主从同步事件有3种形式:statement、row、mixed。

  1. statement:会将对数据库操作的sql语句写入到binlog中。
  2. row:会将每一条数据的变化写入到binlog中。
  3. mixed:statement与row的混合。Mysql决定什么时候写statement格式的,什么时候写row格式的binlog。

3.2在master机器上的操作

当master上的数据发生改变的时候,该事件(insert、update、delete)变化会按照顺序写入到binlog中。

binlog dump线程

当slave连接到master的时候,master机器会为slave开启binlog dump线程。当master 的 binlog发生变化的时候,binlog dump线程会通知slave,并将相应的binlog内容发送给slave。

3.3在slave机器上的操作

当主从同步开启的时候,slave上会创建2个线程。

  • I/O线程。该线程连接到master机器,master机器上的binlog dump线程会将binlog的内容发送给该I/O线程。该I/O线程接收到binlog内容后,再将内容写入到本地的relay log。
  • SQL线程。该线程读取I/O线程写入的relay log。并且根据relay log的内容对slave数据库做相应的操作。

3.4如何在master、slave上查看上述的线程?

使用SHOW PROCESSLIST命令可以查看。

如图,在master机器上查看binlog dump线程。

如图,在slave机器上查看I/O、SQL线程。

4、讲了这么多,一图以蔽之

5、关于实战

关于实战,请参考我的另一篇文章:Mysql主从同步实战

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Mysql主从同步  # mysql主从同步原理  # mysql  # 主从同步配置  # Mysql主从同步备份策略分享  # mysql主从同步复制错误解决一例  # 详解Mysql主从同步配置实战  # MYSQL主从数据库同步备份配置的方法  # MySQL主从同步(复制)操作实战记录  # 机器上  # 会将  # 什么时候  # 写到  # 如图  # 连接到  # 发送给  # 都在  # 是怎么  # 这么多  # 说到  # 并将  # 会为  # 讲了  # 再将  # 请参考  # 上做  # 上会  # 大家多多  # 可以查看 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  Android Socket接口实现即时通讯实例代码  Laravel如何创建自定义中间件?(Middleware代码示例)  如何在Windows虚拟主机上快速搭建网站?  如何用JavaScript实现文本编辑器_光标和选区怎么处理  html5的keygen标签为什么废弃_替代方案说明【解答】  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  如何在Ubuntu系统下快速搭建WordPress个人网站?  Laravel用户密码怎么加密_Laravel Hash门面使用教程  Laravel如何实现API资源集合?(Resource Collection教程)  进行网站优化必须要坚持的四大原则  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  WordPress 子目录安装中正确处理脚本路径的完整指南  Laravel如何使用Blade组件和插槽?(Component代码示例)  EditPlus中的正则表达式实战(6)  Laravel如何集成Inertia.js与Vue/React?(安装配置)  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  如何在IIS中配置站点IP、端口及主机头?  个人摄影网站制作流程,摄影爱好者都去什么网站?  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  Laravel定时任务怎么设置_Laravel Crontab调度器配置  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  成都网站制作公司哪家好,四川省职工服务网是做什么用?  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  音乐网站服务器如何优化API响应速度?  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  如何在云主机上快速搭建多站点网站?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  如何为不同团队 ID 动态生成多个非值班状态按钮  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  如何用好域名打造高点击率的自主建站?  EditPlus 正则表达式 实战(3)  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  如何选择PHP开源工具快速搭建网站?  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  Laravel如何配置Horizon来管理队列?(安装和使用)