MySQL 复制技术详解

MySQL 复制技术用于在多个服务器之间同步数据,提高系统的可用性、可靠性和性能。本文将系统性地介绍三种主要的MySQL复制方式:主从复制(Master-Slave Replication)、主主复制(Master-Master Replication)、组复制(Group Replication)。

主从复制(Master-Slave Replication)

一、主从复制概述

主从复制是一种常见的数据复制模式,其中一个数据库服务器作为主服务器(Master),负责处理所有的写操作和部分读操作,而一个或多个从服务器(Slave)负责复制主服务器的数据并处理读请求。这样可以实现读写分离,提高系统的性能和可用性。

二、主从复制的工作原理

主从复制的基本原理如下:

  1. 主服务器(Master):记录所有数据更改操作到二进制日志文件(Binary Log)中。二进制日志记录了所有DDL(数据定义语言)和DML(数据操作语言)操作,但不包括SELECT查询。

  2. 从服务器(Slave):读取主服务器的二进制日志文件并将这些更改应用到自己的数据库中,从而使自己的数据与主服务器保持一致。具体过程如下:

    • I/O线程:从服务器的I/O线程连接到主服务器,并请求读取其二进制日志文件。读取到的日志会写入从服务器的中继日志(Relay Log)。
    • SQL线程:从服务器的SQL线程读取中继日志,并执行其中记录的所有操作,从而实现数据同步。
三、主从复制的配置步骤

以下是配置MySQL主从复制的详细步骤:

步骤1:配置主服务器(Master)

  1. 编辑MySQL配置文件my.cnf,启用二进制日志并设置服务器ID。

    [mysqld]
    log-bin=mysql-bin
    server-id=1
    

  2. 重启MySQL服务以应用配置更改。

  3. 创建用于复制的用户并授予复制权限。

    CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
    FLUSH PRIVILEGES;
    

  4. 获取当前的二进制日志文件名和位置。

    SHOW MASTER STATUS;
    

步骤2:配置从服务器(Slave)

  1. 编辑MySQL配置文件my.cnf,设置服务器ID。

    [mysqld]
    server-id=2
    

  2. 重启MySQL服务以应用配置更改。

  3. 配置从服务器连接主服务器,并指定复制开始的二进制日志文件名和位置。

    CHANGE MASTER TOMASTER_HOST='master_host_ip',MASTER_USER='replica_user',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=0;
    START SLAVE;
    

步骤3:检查复制状态

  1. 在从服务器上检查复制状态,确保I/O线程和SQL线程都在运行。

    SHOW SLAVE STATUS\G;
    

  2. 确认以下字段的状态:

    • Slave_IO_Running:Yes
    • Slave_SQL_Running:Yes
四、主从复制的应用场景和优势

应用场景

  • 读写分离:将读操作分散到多个从服务器上,提高读性能。
  • 数据备份:从服务器作为主服务器的实时备份,提高数据安全性。
  • 故障恢复:主服务器出现故障时,可以迅速切换到从服务器,减少停机时间。

优势

  • 配置简单:主从复制的配置相对简单,易于实现。
  • 扩展性好:可以添加多个从服务器来分担读请求,提升系统性能。
  • 实时性高:从服务器几乎实时地同步主服务器的数据,保证数据一致性。
五、注意事项和常见问题

注意事项

  • 数据一致性:在高并发写入场景下,可能会出现数据不一致的情况,需要注意处理。
  • 网络延迟:主从服务器之间的网络延迟可能会影响复制的实时性。
  • 服务器配置:主从服务器的硬件配置和MySQL配置需要保持一致,以避免性能瓶颈。

常见问题

  • 复制延迟:由于网络问题或从服务器性能瓶颈,可能会导致复制延迟。
  • 中继日志损坏:从服务器的中继日志文件损坏,可能会导致复制中断,需要重新配置复制。
  • 主服务器负载:主服务器需要处理所有的写操作和复制请求,负载较高时可能会影响性能。
六、结论

主从复制是MySQL中最常用的复制方式,通过读写分离和数据备份等方式有效提高了系统的性能和可用性。尽管存在一定的配置和维护成本,但它为数据库的高可用性和数据安全性提供了重要保障。

主主复制(Master-Master Replication)

主主复制是一种双向复制模式,允许两个服务器同时作为主服务器和从服务器,从而实现高可用性和负载均衡。

一、主主复制概述

主主复制是一种高级的复制模式,两个MySQL服务器既是主服务器又是从服务器,能够互相同步数据。每个服务器既可以处理写操作,也可以处理从另一个服务器复制过来的写操作。主主复制主要用于以下场景:

  • 高可用性:当一个服务器宕机时,另一个服务器可以继续提供服务。
  • 负载均衡:通过将读写请求分散到两个服务器上,提高系统的整体性能。
二、主主复制的工作原理

主主复制的基本原理与主从复制相似,但它是双向的。具体过程如下:

  1. 主服务器1(Master1):记录所有数据更改操作到二进制日志文件中,并复制到主服务器2。
  2. 主服务器2(Master2):读取主服务器1的二进制日志文件并应用更改,同时记录自己的数据更改到二进制日志文件中,并复制回主服务器1。

这种双向复制需要特别注意数据一致性和冲突问题,例如:

  • 循环复制:需要确保一个事务不会被无限复制。
  • 自增主键冲突:需要避免两个服务器生成相同的自增值。
三、主主复制的配置步骤

以下是配置MySQL主主复制的详细步骤:

步骤1:配置主服务器1(Master1)

  1. 编辑MySQL配置文件my.cnf,启用二进制日志并设置服务器ID。

    [mysqld]
    log-bin=mysql-bin
    server-id=1
    auto_increment_increment = 2
    auto_increment_offset = 1
    

  2. 重启MySQL服务以应用配置更改。

  3. 创建用于复制的用户并授予复制权限。

    CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
    FLUSH PRIVILEGES;
    

  4. 获取当前的二进制日志文件名和位置。

    SHOW MASTER STATUS;
    

步骤2:配置主服务器2(Master2)

  1. 编辑MySQL配置文件my.cnf,启用二进制日志并设置服务器ID。

     
    [mysqld]
    log-bin=mysql-bin
    server-id=2
    auto_increment_increment = 2
    auto_increment_offset = 2
    

  2. 重启MySQL服务以应用配置更改。

  3. 创建相同的复制用户并授予复制权限。

    CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
    FLUSH PRIVILEGES;
    

  4. 获取当前的二进制日志文件名和位置。

     
    SHOW MASTER STATUS;
    

步骤3:配置双向复制

在主服务器1(Master1)上配置从主服务器2的复制

  1. 配置Master1连接Master2。
     
    CHANGE MASTER TOMASTER_HOST='master2_host_ip',MASTER_USER='replica_user',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=0;
    START SLAVE;
    

在主服务器2(Master2)上配置从主服务器1的复制

  1. 配置Master2连接Master1。
     
    CHANGE MASTER TOMASTER_HOST='master1_host_ip',MASTER_USER='replica_user',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=0;
    START SLAVE;
    

四、避免冲突和循环复制

为了避免主主复制中的冲突和循环复制问题,可以采取以下措施:

  1. 防止循环复制:在MySQL 5.7和更高版本中,可以启用GTID(全局事务标识)模式来防止循环复制。

     
    [mysqld]
    gtid_mode=ON
    enforce_gtid_consistency=ON
    

  2. 避免自增主键冲突:配置自增主键的增量(auto_increment_increment)和起始值(auto_increment_offset),确保两个服务器生成的自增值不冲突。

    [mysqld]
    auto_increment_increment = 2
    auto_increment_offset = 1  # 在Master1上
    auto_increment_offset = 2  # 在Master2上
    

五、主主复制的应用场景和优势

应用场景

  • 高可用性:主主复制实现了高可用性,即使一个服务器宕机,另一个服务器仍可继续提供服务。
  • 负载均衡:将读写请求分散到两个服务器上,提高系统性能。

优势

  • 双向复制:两个服务器均可处理写操作,灵活性更高。
  • 高可用性:主主复制提供了更高的可用性,故障切换更为方便。
  • 性能提升:通过负载均衡提高了系统的整体性能。
六、注意事项和常见问题

注意事项

  • 数据一致性:确保双向复制的过程中数据一致性,避免数据冲突。
  • 循环复制:配置GTID模式防止循环复制。
  • 自增主键:避免自增主键冲突,通过配置不同的增量和起始值。

常见问题

  • 复制冲突:由于双向写入可能导致数据冲突,需要设计应用逻辑以避免冲突。
  • 网络延迟:网络延迟可能会影响复制的实时性,需要优化网络配置。
  • 配置复杂:主主复制的配置和维护相对复杂,需要更多的管理和监控。
七、结论

主主复制是一种强大的MySQL复制模式,通过双向复制实现了高可用性和负载均衡。虽然配置和维护较为复杂,但其提供的高可用性和性能提升使其在关键业务场景中得到了广泛应用。

组复制(Group Replication)

组复制是一种基于分布式协议的复制方式,提供了高可用性、自动故障转移和数据一致性保障。

一、组复制概述

MySQL组复制是一种原生的高可用性解决方案,通过分布式一致性协议(如Paxos或Raft)实现多节点之间的数据同步。组复制允许多个MySQL服务器组成一个复制组,所有成员都可以同时处理读写请求,并确保数据的一致性。

二、组复制的工作原理

组复制的基本原理如下:

  1. 组成员:每个服务器都是复制组的一部分,称为组成员(Group Member)。每个成员都可以接受客户端的读写请求。
  2. 事务提交:事务在提交时,先由发起节点(Primary)进行验证,之后广播给所有组成员。所有成员通过分布式协议进行投票,确保大多数节点同意后事务才正式提交。
  3. 自动故障转移:当组中的某个成员发生故障时,其他成员可以自动选举新的主节点,确保服务的连续性。
三、组复制的配置步骤

以下是配置MySQL组复制的详细步骤:

步骤1:准备工作

  1. 确保所有组成员运行MySQL 5.7或更高版本。
  2. 为所有组成员配置相同的网络和硬件环境,确保低延迟和高带宽的网络连接。

步骤2:配置所有组成员

  1. 编辑每个组成员的MySQL配置文件my.cnf,启用GTID和组复制相关参数。

     
    [mysqld]
    server-id=1  # 每个成员的server-id必须唯一
    gtid_mode=ON
    enforce_gtid_consistency=ON
    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    binlog_checksum=NONE
    log_slave_updates=ON
    log_bin=binlog
    binlog_format=ROW
    transaction_write_set_extraction=XXHASH64
    group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"  # 组的UUID
    group_replication_start_on_boot=OFF
    group_replication_ssl_mode=REQUIRED
    group_replication_bootstrap_group=OFF
    group_replication_local_address="192.168.1.1:24901"  # 成员的本地地址
    group_replication_group_seeds="192.168.1.1:24901,192.168.1.2:24902,192.168.1.3:24903"  # 组成员列表
    group_replication_ip_whitelist="192.168.1.0/24"  # 允许访问的IP范围
    

  2. 重启MySQL服务以应用配置更改。

步骤3:启动组复制

  1. 在每个组成员上安装组复制插件。

     
    INSTALL PLUGIN group_replication SONAME 'group_replication.so';
    

  2. 在第一个组成员上引导组复制(仅在第一个成员上执行)。

     
    SET GLOBAL group_replication_bootstrap_group=ON;
    START GROUP_REPLICATION;
    SET GLOBAL group_replication_bootstrap_group=OFF;
    

  3. 在其他组成员上启动组复制。

     
    START GROUP_REPLICATION;
    

步骤4:检查组复制状态

  1. 查看组复制状态,确保所有成员都已成功加入复制组。
     
    SELECT * FROM performance_schema.replication_group_members;
    

四、组复制的应用场景和优势

应用场景

  • 高可用性:组复制提供了自动故障转移功能,适用于需要高可用性的关键业务系统。
  • 数据一致性:通过分布式一致性协议确保数据的一致性,适用于需要强一致性的应用场景。
  • 读写分离:所有组成员都可以处理读写请求,实现读写分离和负载均衡。

优势

  • 自动故障转移:当某个组成员发生故障时,其他成员可以自动选举新的主节点,确保服务的连续性。
  • 数据一致性强:组复制通过分布式协议确保所有成员数据的一致性,避免数据冲突。
  • 扩展性好:可以根据业务需求灵活添加或删除组成员,提升系统的扩展性。
五、注意事项和常见问题

注意事项

  • 网络配置:组复制对网络延迟和带宽要求较高,需要确保低延迟和高带宽的网络环境。
  • 硬件配置:所有组成员的硬件配置应保持一致,避免性能瓶颈。
  • 配置复杂度:组复制的配置和维护相对复杂,需要更多的管理和监控。

常见问题

  • 复制延迟:网络问题或组成员性能瓶颈可能导致复制延迟,需要优化网络和硬件配置。
  • 故障恢复:组成员故障后需要及时恢复和重新加入组,确保数据一致性。
  • 组成员冲突:由于组成员间需要进行一致性投票,可能会出现投票冲突,需要设计合理的事务逻辑。
六、结论

组复制是一种高级的MySQL复制模式,通过分布式协议实现了高可用性、自动故障转移和数据一致性保障。尽管配置和维护较为复杂,但其提供的高可用性和性能提升使其在关键业务场景中得到了广泛应用。通过系统性地了解主从复制、主主复制和组复制,可以根据实际需求选择合适的复制模式,提高数据库系统的可靠性和性能。

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

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

相关文章

枫清科技创始人高雪峰:不取侥幸之利,做难而正确的事!丨数据猿专访

大数据产业创新服务媒体 ——聚焦数据 改变商业 金庸有一本著作叫做《侠客行》,这部武侠小说的主角叫做石破天,他从小的时候便跟随少林弟子习武。长大后,随着自己获得的感悟越来越多,最终选择开宗立派,独创一门武功行…

碧海威L7云路由无线运营版 confirm.php/jumper.php 命令注入漏洞复现(XVE-2024-15716)

0x01 产品简介 碧海威L7网络设备是 北京智慧云巅科技有限公司下的产品,基于国产化ARM硬件平台,采用软硬一体协同设计方案,释放出产品最大效能,具有高性能,高扩展,产品性能强劲,具备万兆吞吐能力,支持上万用户同时在线等高性能。其采用简单清晰的可视化WEB管理界面,支持…

React Hooks小记(十)_useCallback

useCallback 1. 语法格式 之前我们所学的 useMemo 能够达到缓存某个变量值的效果,而当前要学习的 useCallback 用来对组件内的函数进行缓存,它返回的是缓存的函数。它的语法格式如下: const memoCallback useCallback(cb, array)useCallb…

【ONLYOFFICE 8.1】的安装与使用——功能全面的 PDF 编辑器、幻灯片版式、优化电子表格的协作

🔥 个人主页:空白诗 文章目录 一、引言二、ONLYOFFICE 简介三、安装1. Windows/Mac 安装2. 文档开发者版安装安装前准备使用 Docker 安装使用 Linux 发行版安装配置 ONLYOFFICE 文档开发者版集成和开发 四、使用1. 功能全面的 PDF 编辑器PDF 查看和导航P…

小公司做自动化的困境

1. 人员数量不够 非常常见的场景, 开发没几个, 凭什么测试要那么多, 假设这里面有3个测试, 是不是得有1个人会搞框架? 是不是得有2人搞功能测试, 一个人又搞框架, 有些脚本, 真来得及吗? 2. 人员基础不够 现在有的大公司, 是这样子协作的, 也就是某模块需求谁谁测试的, 那么…

【高级篇】性能优化:解锁数据库潜能的艺术(十)

引言 随着基础篇的结束,我们进入了MySQL高级篇的旅程,首站便是性能优化。在当今数据驱动的世界里,数据库的性能直接影响着应用的响应速度和用户体验。本章,我们将深入探讨查询优化、服务器参数调整、InnoDB引擎调优以及慢查询日志分析等关键领域,帮助你掌握解锁数据库潜能…

GEOS学习笔记(三)

LineString类型GEOS_LINESTRING double line[] {-100.0,0.0, 100.0,0.0}; GEOSCoordSequence* seq GEOSCoordSeq_copyFromBuffer( line, 2, 0, 0); GEOSGeometry* p1 GEOSGeom_createLineString(seq); GEOSGeometry* p2 GEOSGeomFromWKT("LINESTRING (100 -100.0,100.0…

交易例子----qmt实盘分钟交易例子,提供交易源代码

今天给大家一个利用qmt_trader交易策略,我现在实盘使用的系统是自己开发的,只需要把qmt_trader当中第三方库使用就可以,源代码开源开源直接下载 量化系统--开源强大的qmt交易系统,提供源代码 参考教程使用,下载当第三…

ONLYOFFICE桌面编辑器8.1版:个性化编辑和功能强化的全面升级

ONLYOFFICE是一款全面的办公套件,由Ascensio System SIA开发。该软件提供了一系列与微软Office系列产品相似的办公工具,包括处理文档(ONLYOFFICE Document Editor)、电子表格(ONLYOFFICE Spreadsheet Editor&#xff0…

Ubuntu Nvidia GPU驱动安装和故障排除

去官网 菜单列表下载,或者直接下载驱动 wget https://cn.download.nvidia.com/XFree86/Linux-x86_64/550.54.14/NVIDIA-Linux-x86_64-550.54.14.run 安装驱动 /data/install/NVIDIA-Linux-x86_64-550.54.14.run 执行命令,显示GPU情况 出错处理&…

【深度学习】tensorboard的使用

目前正在写一个训练框架,需要有以下几个功能: 1.保存模型 2.断点继续训练 3.加载模型 4.tensorboard 查询训练记录的功能 命令: tensorboard --logdirruns --host192.168.112.5 效果: import torch import torch.nn as nn impor…

java 利用poi读取wps嵌入式图片,自测

代码 主要工具类 需要引入依赖&#xff1a; mvn install:install-file -DfileC:\Users\18151\Downloads\apache-xmlbeans-bin-5.2.1-20240522\apache-xmlbeans-5.2.1\bin\xmltypes.jar -DgroupIdcn.wps -DartifactIdofficeDocument -Dversion1.0 -Dpackagingjar<dependen…

视频网站系统

摘 要 随着互联网的快速发展和人们对视频内容的需求增加&#xff0c;视频网站成为了人们获取信息和娱乐的重要平台。本论文基于SpringBoot框架&#xff0c;设计与实现了一个视频网站系统。首先&#xff0c;通过对国内外视频网站发展现状的调研&#xff0c;分析了视频网站的背景…

React@16.x(41)路由v5.x(6)常见应用场景(3)- 实现导航守卫

目录 1&#xff0c;简单实现1.1&#xff0c;监听1.2&#xff0c;控制跳转 2&#xff0c;全局封装3&#xff0c;阻止跳转 vue-router 中的导航守卫 router.beforeEach 有2个作用&#xff1a; 监听路由跳转&#xff1b;控制路由是否可以跳转。 在 React 中可以模拟实现。 1&am…

一站式uniapp优质源码项目模版交易平台的崛起与影响

一、引言 随着信息技术的飞速发展&#xff0c;软件源码已成为推动行业进步的重要力量。源码的获取、交易和流通&#xff0c;对于开发者、企业以及项目团队而言&#xff0c;具有极其重要的意义。为满足市场对高质量源码资源的迫切需求&#xff0c;一站式uniapp优质源码项目模版…

STM32开发实战:SPI接口在W25Q64 Flash存储器中的应用

摘要 本文将深入探讨STM32微控制器如何利用SPI接口与W25Q64 Flash存储器进行通信。W25Q64是一款常用的SPI串行Flash存储器&#xff0c;具有8Mbit的存储容量。本教程将指导读者完成硬件连接、SPI配置、读写操作&#xff0c;并提供实际的代码实现。 1. SPI接口概述 SPI是一种串…

激光雷达数据处理

激光雷达技术以其高精度、高效率的特点&#xff0c;已经成为地表特征获取、地形建模、环境监测等领域的重要工具。掌握激光雷达数据处理技能&#xff0c;不仅可以提升工作效率&#xff0c;还能够有效提高数据的质量和准确性&#xff0c;为决策提供可靠的数据支持。 第一章、激…

【论文解读】STUDY ON CODING TOOLS BEYOND AV1

论文下载地址:STUDY ON CODING TOOLS BEYOND AV1 摘要 开放媒体联盟最近启动了针对超越AV1的下一代视频编码工具的探索活动。 在这方面,本文介绍了一套在称为libaom的代码库之上经过研究、实施和测试的编码工具包,该代码库用于探索下一代视频压缩工具。 所提出的工具涵盖了…

Spring自带的持久层模板类:JdbcTemplate+Spring框架声明式事务管理实战

模板技术 Spring框架中提供了很多模板类来简化编程&#xff0c;使用模板类编写程序会变的简单 持久层模板JdbcTemplate JdbcTemplate是什么 JDBCTemplate是Spring Framework中的一个核心类&#xff0c;用于简化JDBC&#xff08;Java数据库连接&#xff09;代码的编写。它提供…

Gazebo给机器人添加碰撞检测属性bumper

参考&#xff1a;GAZEBO探索——给机器人加上bumper_gazebo bumper-CSDN博客 gazebo的bumper使用_gazebo bumper-CSDN博客使用URDF在Gazebo中搭建碰撞仿真(bumper)_gazebo bumper-CSDN博客 gazebo官网中bumper插件介绍 Gazebo : Tutorial : Gazebo plugins in ROS 添加的到.…