MySQL主从复制的原理

news2025/1/15 20:32:55

MySQL 主从复制是一种数据复制技术,用于在多个数据库服务器之间的数据同步。在主从复制架构中,一个服务器被设置为主服务器,充当数据源,其他服务器被设置为从服务器,用来复制主服务器的数据。

1.主从复制优点

主从复制的主要优点有以下几个:

  1. 高可用性:通过将主数据库的数据复制到一个或多个从数据库,可以在主数据库故障时快速切换到从数据库,以实现系统的高可用性和容错能力,从而保证系统的持续可用性。

  2. 提高整体性能和吞吐量:通过将读请求分散到多个从服务器上进行处理,从而减轻了主服务器的负载压力,提高数据库系统的整体性能和吞吐量。主服务器主要负责写操作,而从服务器主要负责读操作,从而分担了主服务器的压力。

  3. 数据备份和恢复:通过主从同步,可以将主服务器上的数据异步复制到从服务器上,从而实现数据备份和灾难恢复的需求。在应对意外数据丢失、灾难恢复或误操作时,可以使用从服务器作为数据的备份源来进行数据恢复。

2.如何实现主从复制?

① 配置并重启主服务器

在主服务器的配置文件(my.cnf)中添加以下参数:

[mysqld] server-id = 1 # 设置服务器 ID,每个主服务器和从服务器都必须有唯一的 ID 

log_bin = /var/log/mysql/mysql-bin.log # 开启二进制日志,记录数据修改操作

以上配置完成之后,重启 MySQL 服务器,因为重启了 MySQL 服务才能让配置生效。

② 创建用于主从复制的用户

登录到主服务器上,执行以下命令:

CREATE USER 'repl'@'%' IDENTIFIED BY 'password';    -- 替换为实际的用户名和密码
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
③ 查看主服务器状态

在 MySQL 主服务器中,执行以下命令,记录下 File 和 Position 的值,后续用于配置从服务器:

SHOW MASTER STATUS;
④ 配置并重启从服务器

在从服务器的配置文件(my.cnf)中添加以下参数:

[mysqld] server-id = 2 # 设置服务器 ID,每个主服务器和从服务器都必须有唯一的 ID

重启从服务器,让以上配置生效。

⑤ 在从服务器上设置主服务器信息

登录到从服务器的 MySQL 中,执行以下命令(将 MASTER_HOST、MASTER_USER、MASTER_PASSWORD、MASTER_LOG_FILE 和 MASTER_LOG_POS 替换为对应的值):

CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', 
MASTER_PASSWORD='password', MASTER_LOG_FILE='binlog_file', 
MASTER_LOG_POS=log_file_position;
⑥ 启动从服务器的复制进程

执行以下命令启动从服务器的复制进程:

START SLAVE;
⑦ 检查从服务器的复制状态

执行以下命令,确保 Slave_IO_Running 和 Slave_SQL_Running 的值都为 "YES":

SHOW SLAVE STATUS \G;

3.主从复制原理

MySQL 数据库的主从复制主要是基于 Binary Log(二进制文件,简称 bin log)实现的,它的实现流程如下:

它的主要执行流程如下:

  1. 主数据库接收到一个写操作(如 INSERT、UPDATE、DELETE)时,会将这个操作记录到二进制日志(Binary Log)中,将数据修改的操作按顺序记录下来。

  2. 从数据库 IO 线程会自动连接主服务,从二进制中读取同步数据,记录到中继日志(Relay Log)中。

  3. 从数据库的 SQL 线程会定期从中继日志中获取同步数据,写入到从数据库中。

4.Bin Log 日志格式

Binary Log 二级制日志,它总共有以下三种格式(不同的日志格式决定了不同的主从同步效果):

  1. STATEMENT 格式(语句模式,出现在 MySQL 5.1 之前):在这种格式下,binlog 记录的是执行的 SQL 语句的文本。

    1. 优点:日志文件通常较小,复制效率较高。

    2. 缺点:在某些情况下,由于数据库环境的差异(如表结构、字符集等),在从服务器上重放这些 SQL 语句可能会导致不一致的结果。例如,获取当前时间的函数或存储过程等,可能会导致数据不一致。

  2. ROW 格式(行模式,诞生于 MySQL 5.1):在这种格式下,binlog 记录的是每一行数据更改的具体内容。

    1. 优点:能够精确地记录数据的变化,避免了 STATEMENT 格式中的环境依赖问题,提供了更强的一致性保证。

    2. 缺点:日志文件可能会比 STATEMENT 格式大,因为记录了每一行的详细变化。此外,ROW 格式的日志在进行大量数据更新时可能会导致更高的 I/O 开销。

  3. MIXED 格式(混合模式):在这种格式下,binlog 可以根据具体的 SQL 语句和操作自动选择使用 STATEMENT 或 ROW 格式。

    1. 优点:结合了 STATEMENT 和 ROW 格式的优点,能够在保证一致性的同时尽可能地优化日志大小和复制性能。

    2. 缺点:由于混合使用了两种格式,可能需要更复杂的管理和监控。在某些特定情况下,MIXED 格式可能无法达到最优的性能或一致性。

5.主从复制模式

MySQL 中主要有以下两种主从复制的模式,分别是异步复制和半同步复制。

  1. 异步复制:MySQL 主从复制中最常见和默认的模式。在异步复制模式中,主服务器将数据修改操作记录到二进制日志(Binary Log)中,并将日志传输给从服务器。从服务器接收到二进制日志后,会异步地应用这些日志进行数据复制。

    1. 优点:它的优点是及时响应给使用者,主服务器不会受到从服务器的影响而等待确认,可以提高主服务器的性能。

    2. 缺点:由于是异步复制,可能存在数据传输的延迟,且从服务器上的复制过程是不可靠的。如果主服务器故障,尚未应用到从服务器的数据可能会丢失。

  2. 半同步复制:半同步复制是 MySQL 主从复制中的一种增强模式。在半同步复制模式中,主服务器将数据修改操作记录到二进制日志,并等待至少一个从服务器确认已接收到并应用了这些日志后才继续执行后续操作。

    1. 优点:可以提供更高的数据一致性和可靠性,确保至少一个从服务器与主服务器保持同步。如果主服务器故障,已经确认接收并应用到从服务器的数据不会丢失。

    2. 缺点:由于半同步复制需要等待从服务器的确认,因此相对于异步复制,会增加一定的延迟,可能会影响主服务器的性能。

如果对数据一致性和可靠性要求较高,可以考虑使用半同步复制;如果对延迟和主服务器性能要求较高,可以继续使用异步复制,根据实际需求调整复制模式。

6.总结

MySQL 主从复制用于多个数据库服务器之间的数据同步,它可以提供高可用性、提高数据库整体性能和吞吐量,以及可以进行数据备份和数据库恢复。MySQL 主从复制是通过 bin log 实现的,主服务写入操作会同时添加到 bin log 中,而从数据库定期拉取主数据库的 bin log,然后将拉取的数据存放到自己的 relay log 中,之后再由单独 SQL 线程将数据写入到从数据库中,此时 MySQL 的主从同步就完成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1515985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity Timeline学习笔记(3) - SignalTrack信号轨道和自定义带参数的Marker信号和轨道

信号轨道,顾名思义就是运行到某处发送一个信号。 普通用法 普通用法就是没有任何封装的,个人感觉特别难用,但是有必要理解一下工作原理。 添加信号 我们添加一个信号资源 生成后可以看到资源文件,这个是可以拖到SignalTrack上…

web 服务搭建

实验拓扑图: 实验环境搭建 Centos7-5作为Client(12.0.0.12/24);Centos7-1作为网关服务器(配置两块网卡ens33 192.168.246.7/24,ens36 12.0.0.1/24);Centos7-2作为Web1(19…

2024年云仓酒庄深惠公司发布会圆满落幕:共襄盛举,携手共赢

原标题:2024年云仓酒庄深惠公司发布会圆满落幕:共襄盛举,携手共赢 随着岁月的流转,云仓酒庄以其卓越的品质和不懈的创新精神,在葡萄酒行业中独树一帜。2024年,云仓酒庄再次迎来了一场盛大的发布会——深惠…

一文读懂『归并排序』算法(Merge Sort)

目录 归并排序算法(Merge Sort)简介 算法基本思想和流程(时间复杂度O(nlogn) ) ​编辑代码实现 归并排序模板(背诵) 归并排序算法(Merge Sort)简介 归并排序(Merge …

MyBatis入门(JDBC规范,MyBatis,连接池,Lombok)【详解】

目录 一、JDBC规范【了解】 1. JDBC介绍 2. JDBC示例 3. JDBC的问题 二、MyBatis入门【重点】 1. Mybatis是什么 2. Mybatis使用步骤 3. Mybatis入门案例 1.创建SpringBoot工程 2.创建Mapper 3.功能测试 三、连接池【了解】 1. 什么是连接池 2. 有哪些数据库连接池…

Java_9最大连续1的个数

最大连续1的个数 给定一个二进制数组 nums , 计算其中最大连续 1 的个数。 示例 1: 输入:nums [1,1,0,1,1,1] 输出:3 解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3. 示例 2: 输入…

SIP-7043 SV-7043网络吸顶喇叭商场会议室播放器10W网络有源吸顶喇叭

SIP-7043 SV-7043网络吸顶喇叭商场会议室播放器 10W网络有源吸顶喇叭 一、描述 SIP-7043是我司的一款SIP网络有源吸顶喇叭,具有10/100M以太网接口,内置有一个高品质扬声器,将网络音源通过自带的功放和喇叭输出播放,可达到功率1…

Ubuntu23.10安装FFmpeg及编译FFmpeg源码

安装FFmpeg: 打开终端: 输入 sudo apt install ffmpeg 安装成功: 验证FFmpeg 默认安装位置与库与头文件位置 使用FFmpeg源码编译: 1.安装YASM sudo apt-get install yasm

STM32 晶振(用示波器测RCC频率是否一致)

如果测出的频率不准确,可以修改一下看看是否有改善:

1. 用两种方式在springboot项目中实现适配器模式

文章目录 用两种方式在springboot项目中实现适配器模式1. 场景2. 方式1,通过实现类定义类型字段实现2.1 创建接口2.2 创建mysql实现类2.3 创建oracle实现类2.4 创建接口,在接口中注入service集合,根据每个实现类中定义的dbType进行匹配后进行调用2.5 测试…

个人博客系列-后端项目-用户注册功能(7)

介绍 用户注册API的主要流程:1.前端用户提交用户名,密码 2. 序列化器校验用户名,密码是否合法。3.存入数据库。4.签发token 创建序列化器 from rest_framework import serializers from rest_framework_simplejwt.serializers import Toke…

harmonyOS简介及背景

harmonyOS的场景模式18n: 1(入口手机)8(电脑、VR、手环、iPad、智慧屏、)–wifi—n(车载、智能家居等所有)harmonyOS不需要考虑软硬件的差异,是一个兼容N种的超级终端harmonyOS干了两件事: (1&a…

前端项目,个人笔记(一)【定制化主题 + 路由设计】

目录 1、项目准备 1.1、项目初始化 1.2、elementPlus按需引入 注:使用cnpm安装elementplus及两个插件,会报错:vueelement-plus报错TypeError: Cannot read properties of null (reading isCE ) ,修改: 测试&#…

[Redis]——Redis持久化的两种方式RDB、AOF

目录 RDB快照模式 概念: 触发时机: 异步做快照 AOF追加模式 概念: 触发时机: bgrewriteaof命令: 比较两种模式: RDB快照模式 概念: RDB模式就是保存当前Redis的状态到本地磁盘文件&am…

阿里云服务器ECS--安全,稳定,购买灵活,低成本

阿里云服务器ECS英文全程Elastic Compute Service,云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务,阿里云提供多种云服务器ECS实例规格,如ECS经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等,阿里云服务器网al…

【Redis】Redis常用命令一

1.keys:返回所有满足条件的key,比如: KEYS pattern时间复杂度:O(N),返回值:匹配pattern的所有key。 • h?llo 匹配 hello , hallo 和 hxllo • h*llo 匹配 hllo 和 heeeello • h[ae]llo 匹配 hello 和 …

Java基于微信小程序的校园生活互助小助手

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

算法时空复杂度分析:大O表示法

文章目录 前言大O表示法3个时间复杂度分析原则常见的时间复杂度量级空间复杂度参考资料 前言 算法题写完以后,面试官经常会追问一下你这个算法的时空复杂度是多少?(好像作为一名算法工程师,我日常码代码的过程中,并没…

Codeforces Round 931 (Div. 2)题解

A. Too Min Too Max(Problem - A - Codeforces) 题目大意:给定一个数组a[],从中找到4个下标i,j,k,l,求|ai-aj||aj-ak||ak-al||al-ai|的最大值。 思路:显然随便找四个下标与顺序无关,那么我们可以先将a[]排序。那么实…

CSS:实现择色器透明度条的两种方法(附赠一个在线图片转base64网站)

一、效果展示 二、实现方式 1.锥形渐变 .main{width: 600px;height: 20px;background: repeating-conic-gradient(rgba(1, 1, 1, 0.1) 0 25%,transparent 0 50%);background-size: 20px 20px;} 2.背景图 将一个四方格图片转为base64然后直接在css中使用 .main1 {width: 600p…