主从复制的原理、方法及详解

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 主从复制的原理、方法及详解

一、原理

MySQL数据库执行数据的增、删、改操作时,会将这些事件记录到二进制日志中,这些日志会被发送到每台从服务器上。

从服务器上有两个线程:I/O线程和SQL线程,I/O线程用于接收日志并将其转换为中继日志;SQL线程将中继日志的内容进行应用。

MySQL的主从复制通过日志的传递和应用,实现从服务器与主服务器的数据一致。

应用程序客户端连接到一个主数据库,主数据库负责运行全部事务,并且负责在二进制日志中记录所有可能改变MySQL数据库状态的事件。

二、复制方法

MySQL的主从复制支持两种复制方法,一种是使用二进制日志文件名称和事件的位置,另一种是使用GTID。

(一)使用二进制日志文件名称和事件的位置来执行事件或应用更改,并同步主服务器和从服务器之间的数据。

(二)使用GTID(全局事务标识符)的方法具有事务性,不需要处理日志文件或这些文件中的位置,该特性大大简化了许多常见的复制任务。使用GTID进行复制可以保证主服务器和从服务器之间的一致性。

主从复制可以用于备份,分离读写工作负载,并在主服务器发生故障/宕机时创建冗余。MySQL没有提供内置的自动故障转移机制,用户需要手动切换并将从服务器变为活动状态。

三、分类

主从复制有两种类型:异步复制和半同步复制

1.异步复制

当用户将服务器配置为从服务器时,复制过程由从服务器发起,通过与主服务器通信,从服务器将请求主服务器提供自它接收到最后一次更新以来的更新事件,主服务器将在每次状态更改时记录事件,即使从服务器延迟增加或者无法通信,主服务器也将持续处理。这种方式被称为异步复制。

MySQL 复制的默认类型是异步复制。主服务器将事件写入二进制日志,从服务器请求这些更新的日志。主服务器无法确定从服务器是否已经接收并处理了事务,也不保证事件会送达从服务器。

在使用异步复制时,如果主服务器崩溃,则它提交的事务可能没有传输到任何一台从服务器。在这种情况下,如果主服务器执行故障转移到从服务器,可能会导致将故障转移到缺少事务的服务器上。

2.半同步复制

注意,主服务器上的事务已经写入二进制日志,但是在提交到存储引擎时需要等待,直到它收到至少一台从服务器返回的确认信息。

从服务器确认它已经接收一个事务的所有事件,并写入中继日志,保存到磁盘,但不需要在从服务器上应用更改。因此,半同步复制可以保证当主服务器崩溃或发生故障时,它提交的所有事务都已被传送到从服务器。

当从服务器连接到主服务器时,从服务器需要识别是否具有半同步能力,如果具有半同步能力,主服务器的线程执行一个事务提交将被阻挡并等待,直到至少有一台从服务器确认已收到所有事件的事务,或者发生等待超时,只有在事件被写入中继日志并保存到磁盘之后,从服务器才会确认接收事务的事件。

如果在没有任何从服务器确认事务的情况下发生超时,那么主服务器将改为异步复制,一旦有采用半同步复制的从服务器追赶上主服务器时,主服务器复制将恢复为半同步复制。与异步复制相比,半同步复制提供了更好的数据完整性,当提交成功返回时,用户可以确保数据至少存在于两台不同的服务器上。

半同步复制可以通过变量控制从服务器确认接收日志的时间点。该变量名称为rpl_semi_sync_master_wait_point,它有两个选项值:AFTER_SYNC和AFTER_ COMMIT。

1.AFTER_SYNC:默认值,主服务器将每个事务写入其二进制日志,并将二进制日志同步到磁盘。同步完成后,主服务器等待接收事务的从服务器确认。接收确认信息后,主服务器将事务提交给存储引擎,并将结果返回给客户端,然后客户端可以继续处理

2.AFTER_COMMIT:主服务器将每个事务写入其二进制日志,同步二进制日志,并将事务提交到存储引擎。提交后,主服务器等待接收事务的从服务器确认。接收确认信息后,主服务器将结果返回给客户端,然后客户端可以继续处理

在执行故障转移后,原来的主服务器不能重新启动,因为原来的主服务器会存在未提交的事务,如果重启,进行崩溃恢复,会与从服务器上面的数据产生冲突。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
10月前
|
SQL 分布式计算 Hadoop
Hadoop集群管理:向繁琐的计算源创建Say ByeBye
为了解决Hadoop计算源创建复杂、维护困难的问题,Dataphin在V4.4 版本推出了Hadoop集群管理功能,支持用户引用集群信息进行计算源的创建,大大提高用户的创建和维护效率。
180 1
|
9月前
|
存储 程序员 编译器
C 语言中的数据类型转换:连接不同数据世界的桥梁
C语言中的数据类型转换是程序设计中不可或缺的一部分,它如同连接不同数据世界的桥梁,使得不同类型的变量之间能够互相传递和转换,确保了程序的灵活性与兼容性。通过强制类型转换或自动类型转换,C语言允许开发者在保证数据完整性的前提下,实现复杂的数据处理逻辑。
|
7月前
|
关系型数据库 MySQL 数据库
图解MySQL【日志】——两阶段提交
两阶段提交是为了解决Redo Log和Binlog日志在事务提交时可能出现的半成功状态,确保两者的一致性。它分为准备阶段和提交阶段,通过协调者和参与者协作完成。准备阶段中,协调者向所有参与者发送准备请求,参与者执行事务并回复是否同意提交;提交阶段中,若所有参与者同意,则协调者发送提交请求,否则发送回滚请求。MySQL通过这种方式保证了分布式事务的一致性,并引入组提交机制减少磁盘I/O次数,提升性能。
401 4
图解MySQL【日志】——两阶段提交
|
6月前
|
SQL 安全 网络安全
常见的网络攻击形式
网络攻击是利用网络漏洞对硬件、软件及数据进行破坏、更改、泄露等恶意行为,严重威胁个人、企业和国家的信息安全。常见形式包括恶意软件(如病毒、蠕虫、木马)、网络钓鱼、DDoS攻击、中间人攻击、SQL注入和密码攻击。这些攻击手段各异,但均能导致数据泄露、系统瘫痪、经济损失等严重后果。为应对这些威胁,个人和企业应保持警惕,定期更新系统、安装防护软件,并建立完善的网络安全管理制度,以构建坚固的防御体系。
531 2
|
9月前
|
算法 图形学
三维球体空间中光线反射模拟与三维点云提取matlab仿真
本项目使用MATLAB2022A模拟三维椭球体内光线反射并提取三维点云。通过设置椭球模型作为墙壁,根据几何光学原理计算光线在曲面上的反射路径,记录每次反射点坐标,生成三维点云图。核心代码实现多次反射的循环计算与绘图,并展示反射点的位置变化及其平滑处理结果。最终,通过光线追踪技术模拟真实场景中的光线行为,生成精确的三维点云数据,适用于计算机图形学和光学仿真领域。
336 27
|
10月前
|
存储 JavaScript 前端开发
如何优化代码以避免闭包引起的内存泄露
本文介绍了闭包引起内存泄露的原因,并提供了几种优化代码的策略,帮助开发者有效避免内存泄露问题,提升应用性能。
|
缓存 网络协议 Linux
通过实验深入了解 TCP 连接的建立和关闭
TCP/IP 这个主题很多文章比较陈旧,且以讹传讹的东西太多,所以本文作者结合了理论和实践去写,旨在通过一系列实验帮助读者深入理解 TCP 连接的建立过程。
346 13
|
存储 关系型数据库 数据库
初探PostgreSQL体系结构
初探PostgreSQL体系结构
226 0
|
安全 Linux 网络安全
2024黑龙江省职业院校技能大赛信息安全管理与评估赛项规程
2024黑龙江省职业院校技能大赛信息安全管理与评估赛项规程
|
消息中间件 Kafka 网络安全
Kafka. Broker not available
Kafka. Broker not available
392 0