【面试资料】MySQL篇 之 主从同步原理

本文介绍了主从架构在MySQL中的应用,重点阐述了binlog日志在主从同步中的作用,以及MySQL的三大日志(binlog、redolog和undolog)在事务处理、数据复制和恢复中的功能。
摘要由CSDN通过智能技术生成

一. “主从架构、读写分离” 的意义

在这里插入图片描述
对于一个上线的项目,我们通常会为其搭建MySQL的主从架构,实现读写分离,解决 读写压力不均衡的问题,有效提升运行的效率。多个Slave同时分担访问压力,可以帮助实现数据库层面的负载均衡
在这里插入图片描述

为了保证MySQL主库和从库的数据一致,必须要有主从同步(主从复制)的环节。下面我们来介绍MySQL中实现主从同步的原理。

❗ 注意区分概念:

我们所说的【主从分离】指得是MySQL数据库服务器的主从分离,而不是单个数据库的主从分离。

MySQL的主服务器只有一个,我们称之为Master,主服务器里面的各个数据库也都叫 “主库” ;而MySQL的从服务器可以有多个,Slave1、Slave2…,它们所负责管理的都叫 “从库” 。

Master会把它的DDL和DML都存入binlog日志,但是请注意:在进行主从同步的时候,Slave只会接收并执行DML语句(且剔除select),即数据变化相关的【事务】,而会自动跳过DDL语句。也就是说,在最初搭建主从分离架构时,Slave上面的数据库需要我们 手动创建;涉及到数据库结构变更,Slave也无法从binlog日志中自动执行。

二. 原理核心:binlog日志

binlog日志,又称 “二进制日志” ,是MySQL的三大日志文件之一。

binlog日志的主要作用是:记录所有的DDL(数据定义语言,create、alter、drop)语句 和 DML(数据操作语言,insert、update、delete)语句,但不包括数据查询(select、show)语句。

在这里插入图片描述

主从同步原理

  1. Master主库 在 事务提交 时,会把数据变更(增删改)记录在二进制日志文件 binlog 中;
  2. 从库Slave 读取主库的二进制日志文件binlog,写入到从库的中继日志 relay log。
  3. Slave 重做 relay log 中的事件,将改变反映在自己的库中数据上。

在这里插入图片描述

三. 拓展:MySQL三大日志

经过对事务与主从同步两个MySQL知识点的学习,我们对三大日志都有了初步了解,现在进行总结。

1. binlog

Binlog 属于 MySQL服务器层 产生的一种日志,记录了对数据库进行的逻辑操作,包括对数据的增、删、改操作,以及对数据库结构的变更(如创建表、修改表结构等),即 DDL + DML(除去select、show)

Binlog 主要用于实现 数据库 的 复制和恢复。在主从复制和点播复制中,主服务器会将 Binlog 发送给从服务器,从而实现数据的复制和同步。此外,Binlog 还可以用于数据库恢复 和 数据备份等场景。

2. redo log

Redo Log 是 InnoDB引擎特有的 一种日志,它记录了对数据库进行的物理修改,即 DML + 其他数据页修改操作(除去select等)

在事务提交时,Redo Log 记录了事务对数据的修改操作,即使在数据库崩溃后,MySQL 可以通过 Redo Log 来重放事务中的修改操作,确保数据的持久性,即数据库能够在崩溃后恢复到事务提交之后的状态。Redo Log 是为了提高数据库的性能而设计的,它采用了顺序写的方式,可以降低磁盘 I/O 的开销,因此对于高性能的事务处理至关重要。

3. undo log

Undo Log 也是 InnoDB引擎特有的 一种日志,当事务执行 DML 语句(如 INSERT、UPDATE、DELETE)时,Undo Log 会记录对数据的修改操作的逆操作,即 DML的逆操作(除去select)

如果事务执行过程中 发生错误,或者用户 显式地执行了 ROLLBACK 操作,MySQL 可以使用 Undo Log 来撤销事务对数据的修改操作,回滚事务。Undo Log 记录了事务所做的修改操作的逆操作,使得数据库能够恢复到事务开始之前的状态,保持数据库的一致性以及事务的原子性。此外,MySQL 使用 Undo Log 来实现多版本并发控制(MVCC),允许不同的事务同时访问同一数据的不同版本。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值