MySQL主从复制与数据库集群深度解析

一、主从复制核心架构与复制模式

MySQL主从复制是构建分布式数据库的基础技术,通过日志同步机制实现数据冗余与读写分离。其核心架构分为三层:

  1. 日志记录层:主库将数据变更写入二进制日志(Binlog)
  2. 网络传输层:从库I/O线程拉取Binlog并写入中继日志
  3. 事件应用层:从库SQL线程解析日志并执行SQL语句
复制模式对比
模式核心原理数据安全性性能影响适用场景
异步复制主库提交事务后立即返回,不等待从库确认低(主库故障可能丢数据)非核心业务、测试环境
半同步复制主库等待至少1个从库确认后返回中(至少2节点存数据)增加1-5ms订单、支付等中等一致性场景
全同步复制主库等待所有从库确认后返回高(所有节点一致)增加10-50ms金融交易、证券等强一致场景
二、主从复制配置与操作实战
1. 异步复制配置(基础模式)

主库配置(my.cnf)

[mysqld]
server-id=1                      # 唯一实例ID
log-bin=/data/mysql/binlog        # Binlog存储路径
binlog-format=ROW                # 行级格式保证一致性
gtid-mode=ON                     # 启用全局事务ID
enforce-gtid-consistency=ON       # 强制GTID一致性

创建复制用户

CREATE USER 'repl'@'192.168.1.%' IDENTIFIED WITH mysql_native_password BY 'Repl@123';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%';
FLUSH PRIVILEGES;

从库配置(my.cnf)

[mysqld]
server-id=2                      # 不同ID
relay-log=/data/mysql/relay       # 中继日志路径
read-only=ON                     # 从库只读
slave-parallel-workers=4         # 并行复制线程数
slave-parallel-type=LOGICAL_CLOCK # 逻辑时钟并行模式

从库连接主库

CHANGE MASTER TOMASTER_HOST='192.168.1.10',MASTER_USER='repl',MASTER_PASSWORD='Repl@123',MASTER_AUTO_POSITION=1;        # GTID模式自动定位
START SLAVE;
SHOW SLAVE STATUS\G;             # 确认IO/SQL线程运行正常
2. 半同步复制配置(增强安全性)

主库启用半同步

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled=ON;
SET GLOBAL rpl_semi_sync_master_timeout=5000;  # 超时5秒

从库启用半同步

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled=ON;
STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;  # 重启IO线程生效

监控半同步状态

-- 主库查看
SHOW STATUS LIKE 'Rpl_semi_sync_master_status';  -- ON表示启用
SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx';   -- 异步降级次数-- 从库查看
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';   -- ON表示启用
三、内容传输机制与格式深度解析
1. Binlog格式对比与选择
格式存储内容日志量一致性风险典型场景
STATEMENTSQL语句文本函数执行差异开发测试、日志空间敏感
ROW行数据前后镜像生产环境、金融交易
MIXED自动混合前两种模式中等混合场景的折中选择

ROW格式内核
包含TABLE_MAP_EVENT(表结构映射)、WRITE/UPDATE/DELETE_ROWS_EVENT(行操作),完整记录主键和变更字段,确保从库执行结果与主库一致。
隐患示例:STATEMENT格式下INSERT INTO t VALUES (NOW())会导致从库生成不同时间戳,ROW格式则记录主库实际值。

2. 传输流程与优化技术
主库事务提交
写入Binlog
断线重连后请求该位置
请求Binlog增量数据
写入中继日志
解析并执行SQL
更新从库数据
记录Master_Log_Pos
  1. 主库记录:事务提交时写入Binlog Cache,刷盘后生成Binlog文件
  2. 从库拉取:I/O线程通过TCP获取Binlog,写入中继日志
  3. 从库应用:SQL线程解析中继日志,执行SQL语句

优化技术

  • 压缩传输binlog_transaction_compression=zlib(5.7+),大事务压缩比达4:1
  • 断点续传:GTID自动追踪未执行事务,网络中断后无缝恢复
  • 并行复制:MySQL 8.0的WRITESET模式基于行级冲突检测,并行度提升2倍
四、线程分工与底层运行原理
1. 主库线程模型
  • Binlog Dump线程:为每个从库创建独立线程,负责:
    • 解析Binlog为事件流(如FORMAT_DESCRIPTION_EVENT
    • 按GTID过滤事务(仅发送从库未执行的事务)
    • 每秒发送心跳包维持连接活性
2. 从库线程演进
版本线程模型并发能力瓶颈点
5.6I/O+SQL(单线程)大事务延迟显著SQL线程单线程
5.7I/O+SQL+N个回放线程(库级并行)同库事务并行,QPS提升3倍跨库事务仍串行
8.0I/O+协调线程+N个工作线程(行级并行)行级冲突检测,QPS再提升2倍复杂事务依赖仍需优化

MySQL 8.0并行复制配置

slave-parallel-type=WRITESET         # 行级并行模式
slave-parallel-workers=8            # 并行线程数=CPU核心数
transaction-write-set-extraction=XXHASH64 # 行修改哈希算法
五、关键日志作用与管理
1. 二进制日志(Binlog)
  • 核心作用:主从复制数据来源、时间点恢复(PITR)、审计追踪
  • 安全配置
    binlog-encryption=ON              # AES加密防止流量嗅探
    binlog-row-events-max-size=8192   # 限制单行Binlog大小
    
  • 管理命令
    SHOW BINARY LOGS;                  -- 查看所有Binlog
    PURGE BINARY LOGS BEFORE '2024-01-01'; -- 清理过期日志
    
2. 中继日志(Relay Log)
  • 高可用设计:分段存储(默认1GB/文件),从库重启时通过mysql.slave_relay_log_info表恢复位置
  • 空间管理
    SHOW RELAYLOG EVENTS;              -- 查看中继日志进度
    PURGE RELAY LOGS BEFORE '2024-01-01'; -- 清理过期中继日志
    
3. 错误日志(Error Log)
  • 关键错误码
    • 1236:主从连接中断或Binlog不连续(检查网络/日志清理)
    • 1872:GTID事务重复执行(需RESET SLAVE ALL
    • 1593:半同步超时(主库降级为异步,检查从库负载)
六、全同步复制与集群方案
1. 全同步复制实现(Galera Cluster)

核心配置

[mysqld]
wsrep_on=ON                        # 启用Galera
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://192.168.1.10,192.168.1.11,192.168.1.12"
wsrep_sst_method=xtrabackup-v2      # 全量同步方式
wsrep_sync_wait=1                   # 等待所有节点确认

优缺点

  • 优点:强一致性,适合金融交易
  • 缺点:性能损耗30%-50%,集群扩展复杂
2. 高可用集群搭建(InnoDB Cluster)

5节点集群初始化

-- 种子节点执行
dba.createCluster('finance_cluster', {adminUser: 'root',adminPassword: 'Root@123'
});-- 添加节点
dba.joinInstance('repl@192.168.1.11:3306', {password: 'Repl@123',recoveryMethod: 'xtrabackup'
});-- 查看集群状态
SELECT * FROM performance_schema.replication_group_members;

核心特性

  • 自动选举新主库(基于Raft算法)
  • 内置MySQL Router实现连接路由
  • 支持多主写入模式
七、集群维护与故障处理
1. 主从切换实战

手动切换流程

  1. 主库设为只读
    FLUSH TABLES WITH READ LOCK;
    SET GLOBAL read_only=ON;
    
  2. 等待从库同步
    SHOW SLAVE STATUS\G;  -- 确认Seconds_Behind_Master=0
    
  3. 提升从库为主库
    STOP SLAVE;
    RESET SLAVE ALL;
    SET GLOBAL read_only=OFF;
    
  4. 原主库配置为从库
    CHANGE MASTER TO MASTER_AUTO_POSITION=1;
    START SLAVE;
    
2. 复制延迟优化

诊断工具

  • pt-heartbeat:精准测量延迟(误差<1ms)
  • Prometheus监控指标:
    mysql_slave_seconds_behind_master  # 复制延迟
    mysql_binlog_size                # Binlog增长速率
    

优化策略

  • 硬件:主从间部署10Gbps专线,Binlog用NVMe SSD
  • 参数:
    # 主库批量提交
    binlog-group-commit-sync-delay=50
    binlog-group-commit-sync-no-delay-count=100# 从库并行复制
    slave-parallel-workers=8
    
  • SQL优化:大事务拆分为小事务
八、企业级最佳实践
  1. 架构选型

    • 核心交易:半同步+3节点InnoDB Cluster(RTO<30秒,RPO=0)
    • 高并发查询:一主多从+MySQL Router(读写分离)
    • 海量数据:分片集群+MyCat(单库10TB以上)
  2. 安全加固

    • 复制用户仅授予REPLICATION SLAVE权限
    • 启用SSL加密复制连接:
      ssl-ca=/path/to/ca.pem
      ssl-cert=/path/to/server-cert.pem
      ssl-key=/path/to/server-key.pem
      
  3. 监控告警

    • 关键指标:复制延迟>50ms、IO/SQL线程异常、Binlog增长速率>10MB/s
    • 告警通道:短信、邮件、钉钉机器人
九、总结:从复制到分布式的演进

MySQL主从复制已从简单数据同步发展为企业级分布式架构的核心组件。理解其内核(如ROW格式行镜像、GTID事务追踪、WRITESET并行复制)是构建高性能集群的基础。实践中需根据业务特性选择复制模式:

  • 强一致性场景:半同步+InnoDB Cluster(金融、支付)
  • 高并发场景:异步复制+分片集群(电商、社交)
  • 海量数据场景:级联复制+冷热分离(日志、历史数据)

通过深度掌握主从复制与集群技术,结合Prometheus监控与自动化运维工具,可构建兼具性能、可用性与扩展性的数据库系统,支撑企业核心业务的持续发展。

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

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

相关文章

安装emsdk 4.0.10报Connection reset by peer解决

出错如下: 使用浏览器下载所需文件 https://storage.googleapis.com/webassembly/emscripten-releases-builds/deps/node-v22.16.0-darwin-x64.tar.gz 移动到到emsdk/downloads下 修改emsdk.py download_even_if_exists=True 设置环境变量

win11,visual studio 2022,配置dcmtk,opencv

一、配置dcmtk 1 文件下载---地址&#xff0c;Software Development based on DCMTK - dicom.offis.de 源文件下载&#xff0c;选择.zip下载&#xff0c;.tar.gz为Linux和macOS下面常见的压缩包 支持库下载 解决 DCMTK 在 Windows 上编译时所需的依赖库问题 libiconv GNU有…

2025 最新 Appium Inspector 环境搭建教程

1 环境搭建背景 版本升级&#xff1a;Appium 2.0 版本替代 1.x&#xff0c;原 Appium Desktop 因安全漏洞和功能废弃不再适用。需求痛点&#xff1a;Android Studio 仅支持 debug 程序元素定位&#xff0c;需通过 Appium Inspector 实现通用 APK 元素定位。 2 环境搭建步骤 …

Vue 安装使用教程

一、Vue 简介 Vue&#xff08;读作 /vjuː/&#xff0c;类似于“view”&#xff09;是一款用于构建用户界面的渐进式 JavaScript 框架。它易于上手&#xff0c;轻量高效&#xff0c;适合快速构建前端界面&#xff0c;广泛应用于各类 Web 项目中。 二、Vue 安装方式 2.1 直接通…

通过http调用来访问neo4j时报错,curl -X POST 执行指令报错

curl -X POST ^ More? http://localhost:7474/db/neo4j/tx/commit ^ More? -H Authorization: Basic bmVvNGo6MTIzNDU2Nzg ^ More? -H Content-Type: application/json ^ More? -d { \"statements": [{\"statement": \"MATCH (n) RETURN n, label…

Node.js到底是什么

我想像是npm、vite这些名词大家都很熟悉&#xff0c;对它们的作用也有大致印象&#xff0c;但是可能都像我一样不明白Node.js到底是什么&#xff0c;这里给大家带来一个简单介绍。 Node.js 详解&#xff1a;历史发展、生态构建与底层原理 一、Node.js 的起源与历史发展 诞生背…

Rust与Go:GAN实战对决

Rust与Go生成对抗 GAN概念 GAN的全称是Generative Adversarial Network,中文翻译为生成对抗网络。这是一种深度学习模型,由两部分组成:生成器(Generator)和判别器(Discriminator)。生成器的任务是创建数据,而判别器的任务是区分生成器创建的数据和真实数据。这两部分…

pyspark driver 上传pod本地文件到对象存储

前提: pyspark driver on k8s,环境变量或者spark_home/jars 下有相关对象存储的包,报错包问题就这里添加jar即可 from py4j.java_gateway import java_import from pyspark.sql import SparkSession# ----------------------------------------------------------------------…

使用GeoServer发布地图shapefi(.shp)数据

1.创建新的工作区 2.添加新的数据存储&#xff0c;选择Shapefile - ESRI™ Shapefiles (*.shp) 如果这个发布页面退出了 可以这样找回来 点击发布返回图层我们发布的数据在图层显示 点击Layer Preview 预览 现在前端就可以用 OpenLayers地图来调用这个服务了

python+uniapp基于微信小程序的PS社区系统

文章目录 具体实现截图本项目支持的技术路线源码获取详细视频演示&#xff1a;文章底部获取博主联系方式&#xff01;&#xff01;&#xff01;&#xff01;本系统开发思路进度安排及各阶段主要任务java类核心代码部分展示主要参考文献&#xff1a;源码获取/详细视频演示 ##项目…

设计模式 - 组合思维_Unix 设计哲学三大原则

文章目录 引言Unix 哲学本质三大启示总览启示一&#xff1a;保持简单清晰性软件复杂度来源实践方法 启示二&#xff1a;借鉴组合理念Unix 组合示例避免“定制驱动”烂设计 启示三&#xff1a;重拾数据思维数据驱动编程演进案例分析 总结 引言&#xff1a;介绍 Unix 与 Unix 哲学…

C++ 快速回顾(四)

C 快速回顾&#xff08;四&#xff09; 前言一、纯虚函数二、final关键字1.作用到函数2.作用到类 三、虚函数原理四、Lambda一些知识补充 前言 用于快速回顾之前遗漏或者补充C知识 一、纯虚函数 纯虚函数主要是当接口&#xff0c;没有具体的实现要到派生类去实现。 纯虚函数…

vue入门学习时,按照官方的教程生成的vue3项目后,命令行运行npm install出现一堆warn,然后运行npm run dev报错,项目启动失败

日期&#xff1a;2025年6月27日 星期五农历六月初三 VUE版本&#xff1a;vue3 IDE&#xff1a;vs code vue入门学习时&#xff0c;按照官方的教程生成的vue3项目后&#xff0c;命令行运行npm install出现一堆warn&#xff0c;然后运行npm run dev报错&#xff0c;项目启动失败…

jQuery EasyUI 安装使用教程

一、jQuery EasyUI 简介 jQuery EasyUI 是一套基于 jQuery 的用户界面框架&#xff0c;提供了丰富的 UI 组件&#xff0c;如数据表格、树形结构、窗体、对话框等&#xff0c;适用于快速开发后台管理系统和 Web 应用界面。它封装了大量常用功能&#xff0c;使用简单&#xff0c…

python下划线开头函数总结

在Python中&#xff0c;以双下划线 __ 开头的函数&#xff08;或变量&#xff09;具有特殊的命名含义&#xff0c;主要用于实现类的私有成员、魔法方法&#xff08;特殊方法&#xff09;和名称修饰&#xff08;Name Mangling&#xff09;机制。下面详细解释这三种情况&#xff…

代理模式 - Flutter中的智能替身,掌控对象访问的每一道关卡!

痛点场景&#xff1a;直接加载高清大图 假设你的应用需要显示用户相册&#xff1a; NetworkImage(https://example.com/high-res-photo.jpg)面临的问题&#xff1a; &#x1f4f6; 网络差时长时间白屏&#x1f4be; 重复下载相同图片浪费流量&#x1f512; 敏感图片无权限验…

Python集合的创建

一、前言 在 Python 编程中&#xff0c;集合&#xff08;set&#xff09;是一种非常实用的数据结构&#xff0c;它能够存储一组无序且不重复的元素。集合广泛应用于数据去重、交并差运算等场景。 本文将重点讲解 Python 中集合的创建方式&#xff0c;包括使用大括号 {}、set(…

作物生长模型Oryza V3实战15:AutoCalibration程序详解

ORYZA 模型中的 AutoCalibration (v2.1).exe 是用于 ORYZA 模型参数自动校准的可执行程序,在优化 ORYZA 模型参数、提高模型模拟准确性方面具有重要作用。程序能够通过特定算法,在给定的参数取值范围内,自动搜索出一组最优的参数组合,使得模型模拟结果与实际观测数据(如作…

算法-每日一题(DAY12)最长和谐子序列

1.题目链接&#xff1a; 594. 最长和谐子序列 - 力扣&#xff08;LeetCode&#xff09; 2.题目描述&#xff1a; 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 给你一个整数数组 nums &#xff0c;请你在所有可能的 子序列 中找到最长的和谐子序列的…

阿里云-云效自动部署spring boot项目

1.使用云效通过docker自动部署spring boot项目 1.1 spring boot项目配置 # 阿里云的jdk17镜像 FROM registry.cn-zhangjiakou.aliyuncs.com/publicci/openjdk:17-jdk-alpineENV APP_HOME /home/admin/app/# 将target/arms-application.jar 复制到容器中 /home/admin/app/app.…