一文彻底搞懂MySQL主从同步

文章目录

  • 1. 简介
  • 2. 基本原理
  • 3. 实现方式
  • 4. 常见的主从架构模式
    • 4.1 一主一从
    • 4.2 一主多从
    • 4.3 双M
    • 4.4 联级复制
    • 4.5 多主一从
  • 5. 常见问题

1. 简介

MySQL主从同步是一种数据库复制技术,它可以将一台MySQL数据库(称为主服务器)的数据复制到另一台或多台MySQL数据库(称为从服务器)。主从同步可以用于以下目的:

  • 数据备份: 主从同步可以将主服务器的数据复制到从服务器,从而实现数据的备份。
  • 读写分离: 可以将主服务器配置为只读,并将读操作分流到从服务器,从而减轻主服务器的负载。
  • 高可用性: 如果主服务器发生故障,可以将从服务器提升为主服务器,从而保证数据库的高可用性。

2. 基本原理

  1. 主服务器将所有数据变更记录到二进制日志(binlog)中。
  2. 从服务器连接到主服务器,并从主服务器的二进制日志中获取数据变更信息。
  3. 从服务器将获取到的数据变更信息应用到自己的数据库中,从而使主服务器和从服务器的数据保持一致。

3. 实现方式

1. 基于语句的复制(STATEMENT)

主服务器将所有数据变更语句(例如INSERT、UPDATE、DELETE等)复制到从服务器,从服务器再执行这些语句来实现数据同步。
在 MySQL5.0 以前只支持基于语句的复制。基于语句的复制模式下,主库会记录那些造成数据更改的操作,当备库读取并重放这些操作时,实际上只是把主库上的SQL执行一遍。好处是实现简单,简单的记录并执行这些语句,能让主备保持同步。
但实际上基于语句的复制方式有时会出问题。因为主库上的数据更新除了执行的语句外,可能还依赖于其他因素,例如,同一条 SQL 在主库和备库上的执行时间可能稍有不同,因此在传输带 binlog 中,还包括一些元数据信息,如当前的时间戳,还存在着一些无法被正确复制的 SQL,例如,CURRENT_USER() 函数的语句。存储过程和触发器在使用基于语句的复制模式时也可能存在问题。

2. 基于行的复制(ROW)

主服务器将数据变更记录的二进制日志以行的形式复制到从服务器,从服务器再应用这些变更来实现数据同步。
MySQL5.1开始支持基于行复制,这种方式会将实际的数据记录在 binlog 中,跟其他数据库的实现很像。基于行复制的模式有优点,也有缺陷。好处是可以正确的复制每一行,一些语句可以被更加有效的复制。也有一些情况,基于行复制的代价会比较大,例如:

update tb_user set age=10;

由于这条 SQL 会更新全表,使用基于行的开销会很大,因为每一行的数据都会记录到 binlog 中,这使得 binlog 文件庞大,并且会给主库增加额外的负载。

3. 混合模式(MIXED)

以上两种模式的混合使用,一般的复制使用 STATEMENT 模式保存 binlog,对于 STATEMENT 模式无法复制的操作使用 ROW 模式保存 binlog,MySQL 会根据执行的 SQL 语句选择日志保存方式。
因为两种模式各有优缺点以及使用的场合,所以 MySQL 支持在这两种复制模式中动态切换(MIXED模式),MySQL8.0 默认使用基于行复制的方式,理论上基于行的复制模式在整体上更优,且在实际应用中适用于大多数场景,当然也可以使用参数 binlog_format 手动指定复制的模式。

4. 常见的主从架构模式

4.1 一主一从

一主一从模式是最简单的主从架构模式,它由一个主节点和一个从节点组成。主节点负责处理所有写操作,并将其变更同步到从节点。从节点负责处理所有读操作,并从主节点获取最新数据。

优点:

  • 结构简单,易于理解和实现。
  • 成本低,只需两台服务器即可。
  • 性能提升,读操作可以分流到从节点。

缺点:

  • 可用性较低,如果主节点故障,则整个系统不可用。
    -扩展性较差,只能通过增加主节点的性能来提升读写能力。

适用场景:
对读写性能要求不高,对可用性要求较高的场景,例如小型网站、数据库等。

4.2 一主多从

一主多从模式由一个主节点和多个从节点组成。主节点负责处理所有写操作,并将其变更同步到所有从节点。从节点负责处理所有读操作,并从主节点获取最新数据。

优点:

  • 性能提升,读操作可以分流到多个从节点。
  • 可用性提升,如果主节点故障,可以将其中一个从节点提升为主节点。
  • 扩展性较好,可以通过添加从节点来提升读能力。

缺点:

  • 成本较高,需要多台服务器来部署从节点。
  • 数据一致性问题,当主节点发生故障时,从节点的数据可能不一致。

适用场景:
对读写性能要求较高,对可用性要求较高的场景,例如大型网站、数据库等。

4.3 双M

双M模式由两个主节点和多个从节点组成。两个主节点之间相互同步数据,并各自负责一部分写操作。从节点从两个主节点获取最新数据,并负责处理所有读操作。

优点:

  • 可用性更高,即使一个主节点故障,另一个主节点也可以继续提供服务。
  • 数据一致性更好,两个主节点之间相互同步数据,可以保证数据一致性。

缺点:

  • 成本较高,需要多台服务器来部署主节点和从节点。
  • 复杂度较高,需要维护两个主节点之间的同步。

适用场景:
对读写性能要求较高,对可用性和数据一致性要求较高的场景,例如金融系统、电商系统等。

4.4 联级复制

联级复制模式是一种特殊的一主多从模式,它将从节点组织成一个链条,每个从节点只与相邻的两个节点同步数据。

优点:

  • 节省带宽,每个从节点只需要与相邻的两个节点同步数据。
  • 提高扩展性,可以很容易地添加新的从节点。

缺点:

  • 数据一致性问题,如果某个从节点故障,可能会导致数据不一致。
  • 复杂度较高,需要维护从节点之间的同步链条。

适用场景:
对读写性能要求不高,对扩展性要求较高的场景,例如大型分布式系统等。

4.5 多主一从

多主一从模式由多个主节点和一个从节点组成。每个主节点都负责处理一部分写操作,并将其变更同步到从节点。从节点负责处理所有读操作,并从所有主节点获取最新数据。

优点:

  • 读性能高,可以并行从多个主节点读取数据。
  • 扩展性好,可以很容易地添加新的主节点。

缺点:

  • 数据一致性问题,当主节点之间存在冲突时,从节点的数据可能不一致。
  • 复杂度较高,需要维护主节点之间的数据一致性。

适用场景:
对读性能要求较高,对数据一致性要求不严格的场景,例如数据分析系统、报表系统等。

5. 常见问题

  • 主从服务器的版本是否一致: 主从服务器的版本必须一致,否则无法进行同步。
  • 主从服务器的配置是否正确: 主从服务器的配置必须正确,否则无法进行同步。
  • 主从服务器的网络连接是否正常: 主从服务器之间必须能够正常通信,否则无法进行同步。

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

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

相关文章

阿里云香港服务器cn2速度测试和租用价格表

阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品,中国电信CN2高速网络高质量、大规格BGP带宽,运营商精品公网直连中国内地,时延更低,优化海外回中国内地流量的公网线路,可以提高国际业务访问质量。阿里云服务…

YOLO v5项目实战 P5 解决运行detect文件时设置了--view-img但是显示不出来的问题

up主讲的实时显示目标检测后的图片的两种方法: (1)在下面的Terminal中输入下列命令: python detect.py --view-img (2)点击进入右上方的detect的Edit Configurations 然后在这个参数这里输入 --view img…

人工智能学习与实训笔记(八):百度飞桨套件使用方法介绍

人工智能专栏文章汇总:人工智能学习专栏文章汇总-CSDN博客 本篇目录 八、百度飞桨套件使用 8.1 飞桨预训练模型套件PaddleHub 8.1.1 一些本机CPU可运行的飞桨预训练简单模型(亲测可用) 8.1.1.1 人脸检测模型 8.1.1.2 中文分词模型 8.1…

自然语言编程系列(四):GPT-4对编程开发的支持

在编程开发领域,GPT-4凭借其强大的自然语言理解和代码生成能力,能够深刻理解开发者的意图,并基于这些需求提供精准的编程指导和解决方案。对于开发者来说,GPT-4能够在代码片段生成、算法思路设计、模块构建和原型实现等方面给予开…

《数字电子电路》 课程设计:十字路口红绿灯自动控制系统(上)(multisim仿真及PCB实现)

(一)前言 本系列文章就笔者在大二下学期进行《数字电子线路》课程设计的题目:十字路口红绿灯自动控制系统 进行详细的讲解,希望对读者有所帮助。 (二)目录 一、主要指标及要求 二、电路工作原理 1、工作原…

P15---总电磁转矩T

正弦波驱动模式工作的永磁同步电动机的总电磁转矩 T clear clc% 15页表达式 syms Omega theta E I e_A E*sind(theta) e_B E*sind(theta-120) e_C E*sind(theta-240)i_A I*sind(theta) i_B I*sind(theta-120) i_C I*sind(theta-240)P e_A*i_A e_B*i_B e_C*i_CT P/Om…

Unity设备分级策略

Unity设备分级策略 前言 之前自己做的设备分级策略,在此做一个简单的记录和思路分享。希望能给大家带来帮助。 分级策略 根据拟定的评分标准,预生成部分已知机型的分级信息,且保存在包内;如果设备没有被评级过,则优…

QKD安全攻击防御方案分析和分级评估研究报告

今天分享的是行业报告:《QKD安全攻击防御方案分析和分级评估研究报告》 (内容出品方:量子信息网络产业联盟) 报告共计:180页 来源:《见鹿报告》 前言 量子通信是量子信息科学的重要分支,它…

572. 另一棵树的子树

Problem: 572. 另一棵树的子树 文章目录 思路解题方法复杂度Code 思路 这个问题可以通过序列化树和KMP算法来解决。首先,我们将两棵树都序列化为一个字符串列表,然后使用KMP算法来检查第二棵树的序列化结果是否为第一棵树的子串。 解题方法 首先&#xf…

【大模型】0.5B的大模型通义千问1.5-0.5B-Chat来了!!

【大模型】0.5B的大模型通义千问1.5-0.5B-Chat来了!! 模型介绍训练细节Requirements拉取模型示例代码多轮对话测试输出示例资源占用参考 模型介绍 Qwen1.5是Qwen2的测试版,这是一个基于转换器的纯解码器语言模型,在大量数据上进行…

快速实现Python/Flask静默获取微信公众号OpenID的完整指南及代码

初步简介 初始授权请求:用户访问 /api/wx_api/get_wx_openid 路由时,服务器端会生成一个微信授权URL,该URL指向微信的授权页面,并包含了必要的查询参数(如appid、redirect_uri、response_type、scope、state&#xff0…

位运算(一)

位运算注意事项 整形在计算机中是以补码的形式进行存储的,因此位运算也是在补码的基础上进行操作的。 复习:正数:原码反码补码 负数:反码原码取反(除符号位) 补码反码1 位运算~:按位取反(在补码上按位取…

Shellcode免杀对抗(Python)

Shellcode Python免杀,绕过360安全卫士、火绒安全、Defender Python基于cs/msf的上线 cs 执行代码2种可供选择 执行代码 1: rwxpage ctypes.windll.kernel32.VirtualAlloc(0, len(shellcode), 0x1000, 0x40) ctypes.windll.kernel32.RtlMoveMemory…

HTTP 请求 400错误

问题 HTTP 请求 400错误 详细问题 客户端发送请求 public static UserInfo updateUserInfo(UserInfo userInfo) {// 创建 OkHttpClient 对象OkHttpClient client new OkHttpClient();// 创建请求体MediaType JSON MediaType.parse("application/json; charsetutf-8&…

代码随想录算法训练营第三十四天丨860.柠檬水找零、406. 根据身高重建队列、860. 柠檬水找零

860. 柠檬水找零 遇到顾客给20块的&#xff0c;优先拿10块的找给他。 class Solution:def lemonadeChange(self, bills: List[int]) -> bool:change {5: 0, 10: 0}for bill in bills:if bill 5:change[5] 1elif bill 10:if change[5] < 1:return Falsechange[5] - …

目标检测算法之YOLOv5的应用实例(医疗影像辅助诊断领域应用的详解)

在医疗影像辅助诊断领域,YOLOv5可以被应用于快速而准确地识别和定位医学影像中的关键结构,比如肿瘤、器官或病变区域。这有助于医生更有效地分析影像资料,提高诊断的准确性和效率。以下是一个使用YOLOv5在医学影像上进行病灶检测的基本代码示例: import cv2 import torch …

Java实现停车场收费系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 停车位模块2.2 车辆模块2.3 停车收费模块2.4 IC卡模块2.5 IC卡挂失模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 停车场表3.2.2 车辆表3.2.3 停车收费表3.2.4 IC 卡表3.2.5 IC 卡挂失表 四、系统实现五、核心代码…

sqlserver 子查询 =,in ,any,some,all的用法

在 SQL Server 中&#xff0c;子查询常用于嵌套在主查询中的子句中&#xff0c;以便根据子查询的结果集来过滤主查询的结果&#xff0c;或者作为主查询的一部分来计算结果。 以下是 、IN、ANY、SOME 和 ALL 运算符在子查询中的用法示例&#xff1a; 使用 运算符进行子查询&a…

android11以上SD卡存储权限适配申请问题

在Android 11&#xff08;API级别30&#xff09;及以上版本中&#xff0c;应用需要获得MANAGE_EXTERNAL_STORAGE权限。这个权限允许应用访问设备上的所有文件&#xff0c;而不仅仅是它自己的文件。然而&#xff0c;由于这个权限对用户的隐私有潜在的影响&#xff0c;因此Google…

Java-String字符串的常见方法总结

常用方法 1.charAt(int index)方法和tocharArray()方法 charAt(int index)方法&#xff1a;括号里传入整型参数&#xff0c;可以获取到该下标位置的String数组内容&#xff0c;通常用于遍历字符串。 tocharArray()方法&#xff1a;将字符串转化为char类型&#xff0c;再存入c…