探秘MySQL主从复制的多种实现方式

news2024/11/24 18:58:29

欢迎来到我的博客,代码的世界里,每一行都是一个故事


在这里插入图片描述

探秘MySQL主从复制的多种实现方式

    • 前言
    • 基于语句的复制
      • 原理
      • 实现方法
      • 应用场景及优缺点
        • 应用场景
        • 优点
        • 缺点
    • 基于行的复制
      • 原理
      • 实现方法
      • 优势和适用性
        • 优势
        • 适用性
    • 基于混合模式的复制
      • 混合模式复制的工作原理
      • 混合模式复制的优势
      • 混合模式复制在不同场景下的应用和配置方法
    • 基于GTID
      • 工作原理
      • 优势
        • 简化配置和管理
        • 提高容错性
        • 配置方法
    • 多源复制
      • 什么是多源复制?
      • 多源复制的优点
      • 如何配置多源复制?
      • 多源复制的应用场景

前言

数据库就像是一座巨大的图书馆,而MySQL的主从复制技术就像是这座图书馆中的藏书分发系统,能够让我们的读者在不同的阅览室中阅读到同样的书籍。而今天,就让我们一起来探索MySQL主从复制的多种实现方式,带您进入这座神秘的数据库世界!

基于语句的复制

基于语句的复制(Statement-Based Replication, SBR)是MySQL复制的一种模式,它在主服务器(master)上执行的每一个SQL语句都会被记录到二进制日志(binary log)中。然后,这些SQL语句会被复制到从服务器(slave)上,并在从服务器上重新执行,从而达到主从数据一致的目的。

原理

在基于语句的复制模式中,当在主服务器上执行一个SQL操作时,MySQL会将这个操作转换成一个相应的日志事件,并将其写入到二进制日志中。从服务器上的复制线程会定期从主服务器上读取这些日志事件,并在从服务器上重新执行它们。

实现方法

  1. 配置主服务器:在主服务器的配置文件(通常是my.cnfmy.ini)中,需要开启二进制日志,并指定服务器ID。
[mysqld]
log-bin=mysql-bin
server-id=1
  1. 配置从服务器:在从服务器的配置文件中,也需要指定服务器ID(确保与主服务器不同),并配置主服务器的信息。
[mysqld]
server-id=2

之后,你需要在从服务器上执行CHANGE MASTER TO命令,指定主服务器的地址、登录凭证、二进制日志文件名及位置。

  1. 启动复制:在从服务器上,启动复制进程。
START SLAVE;

应用场景及优缺点

应用场景
  • 读写分离:基于语句的复制可以用于读写分离,提高数据库的读取性能。
  • 数据备份:通过在从服务器上复制数据,可以实现数据的实时备份。
  • 灾难恢复:在主服务器出现故障时,可以快速切换到从服务器,保证服务的连续性。
优点
  • 效率高:只复制执行的SQL语句,而不是数据本身,减少了数据传输量。
  • 兼容性好:几乎所有的SQL操作都可以通过基于语句的复制进行复制。
缺点
  • 非确定性操作:对于一些非确定性的SQL语句(如使用NOW()RAND()函数的语句),可能在主从服务器上产生不一致的结果。
  • 依赖环境:由于复制是通过重新执行SQL语句实现的,从服务器上必须具有与主服务器相同的数据库结构和相似的环境设置。
  • 潜在的性能问题:对于一些复杂的SQL语句,可能会在从服务器上消耗更多的资源来重新执行。

总的来说,基于语句的复制是MySQL复制中一个简单高效的模式,适用于多种场景。但在使用时,也需要注意其潜在的问题,特别是在涉及非确定性操作和高资源消耗操作时,可能需要考虑其他复制模式。

基于行的复制

基于行的复制(Row-Based Replication, RBR)是MySQL复制的一种方式,它与基于语句的复制(SBR)有所不同。在RBR中,复制过程不是通过复制执行的SQL语句,而是通过复制数据变更后的行来实现的。

原理

当在主服务器上执行数据修改操作(如INSERT、UPDATE、DELETE)时,MySQL会识别出哪些数据行被修改,并生成相应的行事件。这些行事件会记录具体的数据变更,然后被写入到二进制日志中。从服务器从主服务器的二进制日志中读取这些行事件,并在本地应用这些变更,从而与主服务器保持数据一致。

实现方法

基于行的复制的设置与基于语句的复制类似,但需要确保复制格式设置为基于行。

  1. 在主服务器上配置:在my.cnfmy.ini配置文件中,设置复制格式为基于行,并指定服务器ID。
[mysqld]
binlog_format=ROW
log-bin=mysql-bin
server-id=1
  1. 在从服务器上配置:在从服务器的配置文件中,设置服务器ID(确保与主服务器不同),并配置主服务器信息。
[mysqld]
server-id=2
  1. 启动复制进程:在从服务器上执行CHANGE MASTER TO命令,配置主服务器的信息,并启动复制。
START SLAVE;

优势和适用性

优势
  • 数据一致性:由于是基于数据行的变更来复制,因此可以避免基于语句复制中由于非确定性函数或语句导致的数据不一致问题。
  • 减少冲突:在高并发的环境下,基于行的复制减少了由于复制延迟导致的数据冲突。
  • 适用于复杂查询:对于包含复杂查询和函数的操作,基于行的复制只关注结果的变化,因此可以保证从服务器的数据准确性。
适用性
  • 数据更新频繁的场景:在数据更新操作非常频繁的场景中,基于行的复制能够有效地保持主从服务器间的数据一致性。
  • 大量的DML操作:对于有大量INSERT、UPDATE和DELETE操作的数据库,基于行的复制确保了复制的效率和准确性。
  • 复杂的SQL操作:当执行的SQL语句在从服务器上可能产生不同结果时,基于行的复制是更好的选择,因为它复制的是数据的变化,而不是SQL语句本身。

总而言之,基于行的复制在数据更新频繁和复杂SQL操作的场景下提供了优势,因为它专注于数据的变化本身,从而减少了数据不一致的风险,并且通常可以提供更好的复制性能。然而,需要注意的是,由于复制的是行变更的信息,对于数据量大的变更操作,基于行的复制可能会产生比基于语句复制更大的二进制日志。

基于混合模式的复制

混合模式复制的工作原理

混合模式复制是一种数据复制策略,结合了异步复制和同步复制的优点。在混合模式复制中,一部分数据节点使用同步复制,另一部分数据节点使用异步复制。

在同步复制中,当一条数据写入原始节点时,该数据同时也会写入所有的备份节点。只有当所有的备份节点确认数据写入成功后,写入操作才会被确认为成功。这种方式保证了数据的一致性,但可能会因为网络延迟或备份节点的处理能力而影响写入速度。

在异步复制中,数据首先被写入原始节点,然后在后续的某个时间点,这些数据被复制到备份节点。这种方式的写入速度较快,但在某些情况下可能会导致数据的不一致。

混合模式复制通过将一部分备份节点设置为同步复制,一部分设置为异步复制,既保证了数据的一致性,又提高了写入速度。

混合模式复制的优势

  1. 数据一致性:通过同步复制,混合模式复制确保了至少一部分备份节点与原始节点的数据一致。
  2. 写入速度:通过异步复制,混合模式复制提高了写入速度,减少了由于等待备份节点确认而产生的延迟。
  3. 灵活性:用户可以根据自己的需求,调整同步复制和异步复制节点的比例,以达到最佳的效果。

混合模式复制在不同场景下的应用和配置方法

  • 数据一致性要求较高的场景:在这种场景下,可以增加同步复制节点的比例,以确保数据的一致性。
  • 写入速度要求较高的场景:在这种场景下,可以增加异步复制节点的比例,以提高写入速度。

混合模式复制的配置方法因具体的数据库系统而异。一般来说,可以通过配置文件或命令行参数,指定哪些节点为同步复制,哪些节点为异步复制。

总的来说,混合模式复制提供了一种灵活的数据复制策略,能够根据不同的应用场景和需求,提供高效且一致的数据复制服务。

基于GTID

基于 GTID 的复制是 MySQL 数据库复制的高级特性,它使用全局事务标识符(GTID)来跟踪和管理数据库的复制过程。每个事务都有一个唯一的 GTID,这使得复制过程更加可靠和易于管理。

工作原理

当事务在主服务器上提交时,它被赋予一个唯一的 GTID,这个标识符随着二进制日志一起被记录下来。从服务器在复制过程中,会通过 GTID 来确保它接收和执行的事务是完整和唯一的,同时保持与主服务器的事务顺序一致。

优势

简化配置和管理
  • 自动化复制复位:GTID 让从服务器可以自动找到主服务器上的正确位置继续复制,即使在主服务器发生故障后进行了故障转移。
  • 易于监控:通过检查 GTID 执行和未执行的集合,可以轻松监控复制状态和任何潜在的复制延迟。
提高容错性
  • 无缝故障转移:在多主服务器的复制设置中,如果一个主服务器宕机,其他的主服务器可以接管,而不会丢失事务。
  • 避免复制错误:GTID 确保每个事务只复制一次,避免了复制过程中的重复或丢失。
配置方法
  1. 启用 GTID:在主服务器和所有从服务器的配置文件(my.cnfmy.ini)中启用 GTID。
[mysqld]
gtid_mode=ON
enforce_gtid_consistency=ON
log-bin
log-slave-updates
  1. 配置主从服务器:在从服务器上设置主服务器的信息,并启动 GTID 复制。
    CHANGE MASTER TO MASTER_HOST='主服务器地址', MASTER_USER='复制用户', MASTER_PASSWORD='复制密码', MASTER_AUTO_POSITION=1;
    START SLAVE;
  1. 检查 GTID 复制状态:在主从服务器上检查复制状态,确保 GTID 正确配置并且复制在正常运行。
    SHOW SLAVE STATUS\G
  1. 故障转移:如果主服务器发生故障,您可以使用 GTID 来选择新的主服务器,并使从服务器重新连接并开始复制。

基于 GTID 的复制为 MySQL 数据库提供了一个更加稳定、可靠、易于管理的复制环境。尤其在具有高可用需求的大型数据库系统中,基于 GTID 的复制是推荐的复制方式。

多源复制

多源复制(Multi-Source Replication)是MySQL 5.7版本开始引入的新特性,它允许一台从库连接多个主库进行复制。在此之前,MySQL只支持单源复制,即一台从库只能连接一个主库进行复制。

什么是多源复制?

多源复制是指一台MySQL服务器可以从多个主库复制数据。每个主库和从库的复制关系独立于其他主库,每个复制通道独立运行。

多源复制的优点

  • 降低系统复杂度和成本:在多源复制的架构中,无需再为每个主库部署独立的从库,减少了硬件和维护的成本。
  • 提高灵活性:多源复制提供了更多的复制策略,用户可以根据业务需求灵活配置。
  • 提高可用性:在某个主库出现问题时,从库可以从其他正常的主库复制数据,保证了业务的连续性。

如何配置多源复制?

配置多源复制的步骤与配置单源复制类似,主要的区别在于在从库上需要为每个主库配置一个独立的复制通道。每个复制通道由一个唯一的通道名来标识。

多源复制的应用场景

多源复制在很多场景下都非常有用,比如数据聚合,数据备份,以及提高查询性能等。

总的来说,多源复制作为MySQL 5.7版本的新特性,它的引入极大地提高了MySQL的灵活性和可用性。

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

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

相关文章

【stomp 实战】Spring websocket使用详解和基本原理

spring框架对websocket有很好的支持,stomp协议作为websocket的子协议,Spring也做了很多封装,让我们在开发中易于使用。 学习使用Spring的Websocket模块,当然最好的办法就是看官网说明了。本篇文章对官网做一些简述和个人的理解。 …

链游:未来游戏发展的新风向

链游,即区块链游戏的一种,是一种将区块链技术与游戏玩法相结合的创新型游戏。它利用区块链技术的特性,如去中心化、可追溯性和安全性,为玩家提供了一种全新的游戏体验。链游通常采用智能合约来实现游戏的规则和交易系统&#xff0…

按现价和不变价计算与公布的统计指标主要有哪些

在经济统计和分析工作中 , 有些指标可以直接用实物量表示 , 如粮食和工业品产量等;而有些指标则是用价值量表示的 , 如全国居民人均可支配收入、社会消费品零售总额、商品房销售额等。在计算价值量指标时,一般均要考虑采用什么价格来计算。统计上常用的价…

新媒体运营-----短视频运营-----PR视频剪辑----PR特效

新媒体运营-----短视频运营-----PR视频剪辑-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/138079659 文章目录 1. 混合和对比度1. 滤色2. 对比度 2. 3d和属性粘贴3. 参考线和锚点 1. 混合和对比度 1. 滤色 混合是PS&#xff…

【数据结构(邓俊辉)学习笔记】绪论04——算法分析

文章目录 0. 前言1. 算法分析2.级数2.1基本形式2.2 收敛级数 3.循环 vs 级数4.示例 0. 前言 通过以基本计算模型作为参照,并且以大O记号的形式在上面添加适当刻度,已经建立一套对DSA进行分析的完整工具和体系。不清楚的可以看看复杂度度量 、复杂度分析…

Kafka 生产者应用解析

目录 1、生产者消息发送流程 1.1、发送原理 2、异步发送 API 2.1、普通异步发送 2.2、带回调函数的异步发送 3、同步发送 API 4、生产者分区 4.1、分区的优势 4.2、生产者发送消息的分区策略 示例1:将数据发往指定 partition 示例2:有 key 的…

Python浅谈清朝秋海棠叶版图

1、清朝疆域概述: 清朝是我国最后一个封建王朝,其始于1616年建州女真部努尔哈赤建立后金,此后统一女真各部、东北地区。后又降服漠南蒙古,1644年入关打败农民起义军、灭南明,削三藩,复台湾。后又收外蒙&am…

【后端】python与django的开发环境搭建指南

安装Git 双击Git 客户端安装文件,在安装页面,单击“Next” 在安装路径选择页面,保持默认,单击“Next” 在功能组件选择页面,保持默认,单击“Next” 在开始菜单文件夹设置页面,保持默认&am…

分享Python7个爬虫小案例(附源码)_爬虫实例

在这篇文章中,我们将分享7个Python爬虫的小案例,帮助大家更好地学习和了解Python爬虫的基础知识。以下是每个案例的简介和源代码: 1. 爬取豆瓣电影Top250 这个案例使用BeautifulSoup库爬取豆瓣电影Top250的电影名称、评分和评价人数等信息&…

Redisson - tryLock 函数参数分析

这里有三个参数: waitTime:等待时间leaseTime:超时施放时间TimeUnit:时间单位 等待时间 如果 ABC… 多个线程去抢夺一把锁,A 成功了,如果设置的是 -1,那么 BCD... 就不等待,直接返…

MYSQL45道练习题---持续更新中

来源: Mysql_45道练习题 - 简书 共四张表: ①、course表: CId:课程id Cname:课程名称 TId:老师id ②、student学生表: SId:学生id Sname:…

淘宝店铺商品信息抓取

一、背景 为了更好了解同行或竞争对手的情况,基于对行业数据分析、市场研究、竞争情报收集等方面的需求。一些公司或个人可能希望获取淘宝店铺的商品数据,以便进行以下操作: 市场研究和竞争分析:通过分析淘宝店铺的商品数据&…

Qt [获取Dump] 使用WindowsAPI实现生成MiniDump文件

说明 客户现场的软件偶发崩溃是程序开发者,比较头疼的事情。如何更快速的定位到问题点和解决掉,是开发应该具备的基本能力。 Windows提供了一系列的API,可以记录软件崩溃前的堆栈信息。下面就实现一个生成Dump文件的程序实例。 主要代码 回…

Linux之线程管理

目录 第1关:创建线程 任务描述 相关知识 使用pthread_create函数创建线程 编程要求 答案: 第2关:线程挂起 任务描述 相关知识 使用pthread_join挂起线程 编程要求 答案: 第3关:线程终止 任务描述 相关知识 使用pthread…

意法半导体STM32F407VET6TR单片机优缺点、参数、应用和引脚封装

ST(意法半导体)的型号STM32F407VET6TR属于32位MCU微控制器,基于高性能的ArmCortex-M4 32位RISC核心,工作频率高达168MHz。单精度浮点单元(FPU)用于Cortex-M4核心,支持所有Arm单精度数据处理指令和数据类型。它还实现了一套完整的DSP指令和一个…

走进中财:创邻科技图技术赋能金融高质量发展路演圆满完成!

4月20日下午,由中财MBA金融科技研究会主办的“走进中财”主题活动在中央财经大学商学院的A28教室如期举行。中央财经大学商学院党委副书记杨中英、中财MBA金融科技研究会发起人代表贾晓强、中央财经大学商学院教授王毅等受邀参与本次大会。 创邻科技CEO兼创始人张晨…

python 实现用户登录

1. JWT Token 参考:https://www.zhihu.com/question/364616467 jwt官网:https://jwt.io/#debugger-io 1.1. Token Token 是一个宽泛的术语,它可以指代任何一种用于身份验证的机制。Token 常常被用在验证和授权流程中。Token 可以有不同的形…

标准版/开源版 移动端新增页面使用文档

在标准版开发的实际使用中,随着用户移动端的产品和信息内容不断增多,新增页面来展示对应的产品详情、模块等内容。针对一些概念或者步骤较多的内容,可以新增子页面构建多级模块结构,帮助用户快速定位。 下面就如何新增页面做一讲…

Linux中手工创建一个用户

当我们需要新创建一个用户时,有两种方法 1.使用命令添加用户 2.去配置文件里面添加用户 1,使用useradd命令: [rootlocalhost /]# useradd tmg 然后给它设置一个密码 [rootlocalhost etc]# passwd tmg Changing password for user tmg. N…

janus模块介绍-SIP Gateway

模块启动 默认的SIP GateWay也是https协议,端口为8088或者8089 如果需要在自己搭建的测试服务上测试SIP GateWay模块,则也需要修改为wss 具体改动如下: 找到/opt/janus/share/janus/demos/siptest.js var server "wss://" window.location…