MySQL主从复制原理

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: MySQL主从复制原理

MySQL主从复制的核心步骤


image.png

主库开启binlog并正常记录binlog
a、从库启动IO线程 跟主库建立客户端连接
b、主库启动binlog dump线程
读取主库上的binlog event发送给从库的IO线程
c、从库的IO线程获取到binlog event之后将其写入从库
的Relay Log中
d、从库启动SQL线程 将Relay中的数据重放
完成从库的数据更新


查看binlog


查看binlog是否开启

show variables like '%log_bin%'

image.png

  • log_bin
是否开启binlog
  • log_bin_basename
binlog存储文件的完整名称
会默认在文件名后面添加递增的序号
如mysql-bin.000001
  • log_bin_index
binlog索引文件名称
如mysql-bin.index

查看所有的binlog文件

show binary logs

image.png

文件名称中的序号越大表示日志越新

查看指定binlog内容

show binlog events in 'binlog.000061'

image.png

第一行 Event_type=Format_desc 
内容为 Server ver: 8.0.18, Binlog ver: 4
表示MySQ版本为8.0.18,Binlog版本是V4

执行SQL操作

# 创建库
CREATE DATABASE pingfanrenbiji DEFAULT CHARACTER SET = utf8mb4;
# 创建表
use pingfanrenbiji; 
CREATE TABLE student (id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT);
# 插入数据
INSERT INTO `student` (`id`) VALUES (1);
INSERT INTO `student` (`id`) VALUES (2);

再次查看binlog

show binlog events in 'binlog.000061' limit 66000,1000

image.png

MySQL默认采用自动提交(AUTOCOMMIT)机制
show variables like '%AUTOCOMMIT%';


Relay Log

引入了Relay Log之后
让原本同步的获取事件、重放事件解耦了
两个步骤可以异步的进行
Relay Log充当了缓冲区的作用
Relay Log有一个relay-log.info的文件
用于记录当前复制的进度
下一个事件从什么Pos开始写入
该文件由SQL线程负责更新


复制模型


一主多从

image.png


适合少量写、大量读

场景

  • 读请求被分到了各个从库上,有效的帮主库分散了压力,能够提升读并发
  • 把从库当成一个灾备库,除了主从复制之外,没有其他任何的请求和数据传输
  • 也可将其中一个备库作为预发环境的数据库
但涉及到生产环境数据库的数据敏感性

缺点

如果有n个从库
那么主库会有n个binlog dump线程
如果n比较大 可能会造成主库的性能抖动


级联复制


适合从库较多

image.png

优势

级联复制的好处在于很大程度上减轻了主库的压力
主库只需要关心与其有直接复制关系的从库
剩下的复制则交给从库即可

劣势

由于是这种层层嵌套的关系
如果在较上层出现了错误
会影响到挂在该服务器下的所有子库
这些错误的影响效果被放大了


主主复制


双主意义在于HA,而不是负载均衡

image.png

客户端可以任意写2个主库

劣势

两边的数据冲突的可能性很大
例如复制停止了
系统仍然在向两个主库中写入数据
也就是说一部分数据在A
另一部分的数据在B
但是没有相互复制
且数据也不同步了
要修复这部分数据的难度就会变得相当大


主、被动的主主复制


image.png

客户端只能写一个主库
另一个主库是只读的

应用场景

  • 不中断服务的前提下 对MySQL进行维护、优化 如修改表结构



image.png

假设2个数据库 主动A库和被动B库
a、先停止A库对b库的复制
也就是停掉A上的SQL线程
b、在B上执行非常耗时、可能需要锁表的操作
就不会立即同步到A上来
此时A正对外提供服务 不能使其受到影响
由于采用的是异步的复制模式
所以Relay Log还是继续由I/O线程写入
只是不去进行重放
在B上执行此次的维护操作
"注意"此时A上面发生的更新还是会正常的同步到B来

image.png

c、
执行完后交换读写的角色
也就是让A变成只读的被动主库
而B变为主动主库对外提供服务
d、重新开启SQL线程
A开始去对之前Relay Log中积累的event进行重放
虽然A此时可能会阻塞住
但是A已经没有对外提供服务了
所以没有问题

优势

可以在不停止服务的情况下去做数据库的结构更新
其次可以在主库发生故障的情况下
快速的切换,保证数据库的HA
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
8月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
自然语言处理 搜索推荐 关系型数据库
MySQL实现文档全文搜索,分词匹配多段落重排展示,知识库搜索原理分享
本文介绍了在文档管理系统中实现高效全文搜索的方案。为解决原有ES搜索引擎私有化部署复杂、运维成本高的问题,我们转而使用MySQL实现搜索功能。通过对用户输入预处理、数据库模糊匹配、结果分段与关键字标红等步骤,实现了精准且高效的搜索效果。目前方案适用于中小企业,未来将根据需求优化并可能重新引入专业搜索引擎以提升性能。
589 5
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
8月前
|
SQL 关系型数据库 MySQL
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
MySQL group by 底层原理详解。group by 执行 慢 原因深度分析。(图解+秒懂+史上最全)
|
SQL 网络协议 关系型数据库
MySQL 主从复制
主从复制是 MySQL 实现数据冗余和高可用性的关键技术。主库通过 binlog 记录操作,从库异步获取并回放这些日志,确保数据一致性。搭建主从复制需满足:多个数据库实例、主库开启 binlog、不同 server_id、创建复制用户、从库恢复主库数据、配置复制信息并开启复制线程。通过 `change master to` 和 `start slave` 命令启动复制,使用 `show slave status` 检查同步状态。常见问题包括 IO 和 SQL 线程故障,可通过重置和重新配置解决。延时原因涉及主库写入延迟、DUMP 线程性能及从库 SQL 线程串行执行等,需优化配置或启用并行处理
316 40
|
关系型数据库 MySQL 数据库
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
随着数据量增长和业务扩展,单个数据库难以满足需求,需调整为集群模式以实现负载均衡和读写分离。MySQL主从复制是常见的高可用架构,通过binlog日志同步数据,确保主从数据一致性。本文详细介绍MySQL主从复制原理及配置步骤,包括一主二从集群的搭建过程,帮助读者实现稳定可靠的数据库高可用架构。
785 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
795 7
MySQL事务日志-Undo Log工作原理分析
|
SQL 存储 关系型数据库
MySQL主从复制 —— 作用、原理、数据一致性,异步复制、半同步复制、组复制
MySQL主从复制 作用、原理—主库线程、I/O线程、SQL线程;主从同步要求,主从延迟原因及解决方案;数据一致性,异步复制、半同步复制、组复制
1506 11
|
存储 缓存 关系型数据库
MySQL进阶突击系列(08)年少不知BufferPool核心原理 | 大哥送来三条大金链子LRU、Flush、Free
本文深入探讨了MySQL中InnoDB存储引擎的buffer pool机制,包括其内存管理、数据页加载与淘汰策略。Buffer pool作为高并发读写的缓存池,默认大小为128MB,通过free链表、flush链表和LRU链表管理数据页的存取与淘汰。其中,改进型LRU链表采用冷热分离设计,确保预读机制不会影响缓存公平性。文章还介绍了缓存数据页的刷盘机制及参数配置,帮助读者理解buffer pool的运行原理,优化MySQL性能。
|
SQL 关系型数据库 MySQL
MySQL派生表合并优化的原理和实现
通过本文的详细介绍,希望能帮助您理解和实现MySQL中派生表合并优化,提高数据库查询性能。
363 16

推荐镜像

更多