【MySQL】第11节|MySQL 8.0 主从复制原理分析与实战

一、MySQL主从复制基础

1. 核心概念
  • 定义

MySQL主从复制是将主库(Source/Master)的数据变更同步到一个或多个从库(Replica/Slave)的机制,默认采用异步复制,支持全库、指定库或表的同步。

  • 角色
    • 主库:负责处理写请求,记录二进制日志(Binlog)。
    • 从库:通过读取主库Binlog并回放(Relay Log)实现数据同步,支持读请求分担。
2. 核心优势
  1. 高可用性:通过多从库部署提升容灾能力,主库故障时可手动/自动切换至从库。
  2. 读写分离:从库承担读请求,缓解主库压力,提升整体吞吐量。
  3. 异地灾备:从库部署至异地机房,降低地域级故障风险。
3. 复制类型
  • 异步复制:主库提交事务后立即返回客户端,无需等待从库确认,可能存在延迟和数据丢失风险。
  • 半同步复制:主库等待至少一个从库确认接收Binlog后再提交事务,提升数据可靠性,但增加响应延迟。
  • 延迟复制:从库故意落后主库指定时间,用于数据误操作恢复(如误删表)。

二、异步复制原理与配置

1. 核心流程(基于Binlog位点)
  1. 主库生成Binlog

主库执行写操作时,将变更记录到Binlog文件(如mysql-bin.000001)。

  1. 从库拉取Binlog

从库的I/O线程通过CHANGE MASTER TO指定主库地址、Binlog文件名(如mysql-bin.000001)和起始位置(Position),请求同步数据。

  1. 主库推送Binlog

主库的Dump线程根据从库请求的位点推送Binlog数据。

  1. 从库写入中继日志(Relay Log)

从库接收Binlog并写入本地Relay Log,由SQL线程解析并回放,更新本地数据。

2. 关键配置步骤(示例)

主库配置

# custom.cnf
[mysqld]
server-id=10          # 唯一标识主库
log-bin=mysql-bin     # 启用Binlog
binlog-format=ROW     # 推荐使用ROW格式,记录行级变更

从库配置

[mysqld]
server-id=11          # 唯一标识从库
relay-log=relay-bin   # 中继日志路径
read-only=ON          # 从库设置为只读(避免误写)

主从连接配置(从库执行)

-- MySQL 8.0.23前使用CHANGE MASTER TO
CHANGE MASTER TO MASTER_HOST='主库IP',MASTER_PORT=3306,MASTER_USER='复制用户',MASTER_PASSWORD='密码',MASTER_LOG_FILE='mysql-bin.000001',  -- 主库当前Binlog文件MASTER_LOG_POS=1234;                 -- 主库当前Binlog位置-- MySQL 8.0.23+使用CHANGE REPLICATION SOURCE TO
CHANGE REPLICATION SOURCE TO SOURCE_HOST='主库IP',SOURCE_PORT=3306,SOURCE_USER='复制用户',SOURCE_PASSWORD='密码',SOURCE_LOG_FILE='mysql-bin.000001',SOURCE_LOG_POS=1234;START REPLICA;  -- 启动从库复制线程
3. 状态验证
-- 主库查看Binlog状态
SHOW MASTER STATUS;-- 从库查看复制状态(关键字段)
SHOW REPLICA STATUS \G
# 重点关注:
# Replica_IO_Running: Yes       -- I/O线程运行正常
# Replica_SQL_Running: Yes      -- SQL线程运行正常
# Seconds_Behind_Master: 0      -- 复制延迟(0表示无延迟)

三、半同步复制:提升数据可靠性

1. 核心原理
  • 主库在提交事务前,等待至少一个从库确认已接收并写入Relay Log。
  • 若从库超时未响应,主库退化为异步复制;从库恢复后自动切回半同步。
2. 关键配置

主库启用半同步插件

INSTALL PLUGIN rpl_semi_sync_source SONAME 'semisync_source.so';
SET GLOBAL rpl_semi_sync_source_enabled=ON;

从库启用半同步插件

INSTALL PLUGIN rpl_semi_sync_replica SONAME 'semisync_replica.so';
SET GLOBAL rpl_semi_sync_replica_enabled=ON;

核心参数

  • rpl_semi_sync_source_wait_for_replica_count:主库等待至少N个从库确认(默认1)。
  • rpl_semi_sync_source_timeout:等待超时时间(毫秒,默认10000)。

四、基于GTID的复制:自动化位点管理

1. GTID核心优势
  • 全局唯一事务ID:每个事务在主库生成唯一GTID(格式:server_uuid:transaction_id),避免Binlog位点手动管理。
  • 自动定位同步起点:从库通过MASTER_AUTO_POSITION=1自动获取主库最新事务,无需指定Binlog文件名和位置。
  • 一致性保障:确保每个事务在主从库仅执行一次,避免重复或遗漏。
2. 配置要点

主从库启用GTID

[mysqld]
gtid_mode=ON               # 启用GTID模式
enforce_gtid_consistency=ON # 强制GTID一致性(避免非事务语句破坏一致性)

从库配置(自动定位)

CHANGE REPLICATION SOURCE TO SOURCE_HOST='主库IP',SOURCE_PORT=3306,SOURCE_USER='复制用户',SOURCE_PASSWORD='密码',SOURCE_AUTO_POSITION=1;  # 关键:启用自动位点管理START REPLICA;
3. 主从切换实战
  1. 模拟主库宕机:停止主库服务。
  2. 提升从库为新主库
-- 在目标从库执行(如replica1)
STOP REPLICA;
RESET MASTER;  -- 清除原有复制配置,成为主库
  1. 其他从库指向新主库
CHANGE REPLICATION SOURCE TO SOURCE_HOST='新主库IP',SOURCE_AUTO_POSITION=1;
START REPLICA;

五、主从复制痛点与解决方案

1. 传统Binlog位点复制的痛点
  • 手动管理复杂:首次配置或故障恢复时需手动指定Binlog文件名和位置,易出错。
  • 单点故障风险:主库宕机后,从库需人工选择新主库并配置位点,耗时且可能丢失数据。
2. GTID的解决方案
  • 自动化位点管理:通过SOURCE_AUTO_POSITION自动同步最新事务,无需人工干预。
  • 快速故障切换:从库基于GTID集合差集自动追赶数据,减少切换时间。

六、总结:复制模式对比

维度

异步复制(Binlog位点)

半同步复制

GTID复制

数据可靠性

低(可能丢数据)

中(至少1从库确认)

高(事务唯一且有序)

配置复杂度

高(手动管理位点)

中(需配置插件和参数)

低(自动位点管理)

故障恢复

慢(人工配置位点)

中(需手动切换主库)

快(自动同步差集事务)

适用场景

非核心业务、低延迟要求

金融类中等可靠性场景

高可用集群、频繁主从切换场景

建议:生产环境优先使用GTID+半同步复制组合,平衡可靠性与性能;传统Binlog位点复制仅用于 legacy 系统或简单测试场景。

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

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

相关文章

怎么判断一个Android APP使用了Cocos 这个跨端框架

要判断一个 Android 应用是否使用了 Cocos 跨端框架,可以通过以下步骤进行验证: 一、安装包结构分析 1. 解压 APK 将 .apk 文件重命名为 .zip 并解压,检查以下特征文件: • lib/ 目录: Cocos 引擎的核心原生库文件通常…

删除word中由奇偶页和页码1设置多出来的空白页

问题: 在调整毕设论文格式时,要求奇偶页眉设置不同,且摘要页的页码是1(I)。如果摘要页在整个文档的第偶数页,将其页码设置为1后会变为奇数页,word为了凑齐奇偶页,会在摘要前增加一个…

# 探索自然语言处理的奥秘:基于 Qwen 模型的文本分类与对话系统实现

探索自然语言处理的奥秘:基于 Qwen 模型的文本分类与对话系统实现 在当今数字化时代,自然语言处理(NLP)技术正以前所未有的速度改变着我们的生活和工作方式。从智能语音助手到自动文本生成,从情感分析到机器翻译&…

Linux Shell 切换

在 Linux 系统中,切换至 Bash Shell 在 Linux 系统中,切换至 Bash Shell 的方法如下: 临时切换到 Bash 直接在终端输入以下命令,启动一个新的 Bash 会话: bash 退出时输入 exit 或按 CtrlD 返回原 Shell。 永久切换…

在Windows上,将 Ubuntu WSL 安装并迁移到 D 盘完整教程(含 Appx 安装与迁移导入)

💻 将 Ubuntu WSL 安装并迁移到 D 盘完整教程(含 Appx 安装与迁移导入) 本文记录如何在 Windows 系统中手动启用 WSL、下载 Ubuntu 安装包、安装并迁移 Ubuntu 到 D 盘,避免默认写入 C 盘,提高系统性能与可维护性。 ✅…

doucker 挂载卷

在 Docker 中,挂载卷(Volumes)是一种非常重要的功能,它允许你将宿主机的文件系统与容器的文件系统进行共享。挂载卷不仅可以用于持久化数据,还可以用于在宿主机和容器之间传递文件。 挂载卷的类型 Docker 支持多种类型…

BLIP3-o:一系列完全开源的统一多模态模型——架构、训练与数据集

摘要 在近期关于多模态模型的研究中,将图像理解与生成统一起来受到了越来越多的关注。尽管图像理解的设计选择已经得到了广泛研究,但对于具有图像生成功能的统一框架而言,其最优模型架构和训练方案仍有待进一步探索。鉴于自回归和扩散模型在…

数据分析案例-基于红米和华为手机的用户评论分析

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

基础框架 兼容视频格式

基础框架 兼容视频格式 修改 \src\components\Upload\src\BasicUpload.vue 数据库新增 vue <template><div class"w-full"><div class"upload"><div class"upload-card"><!--图片列表--><divclass"uploa…

qiankun 子应用怎样通过 props拿到子应用【注册之后挂载之前】主应用中发生变更的数据

场景描述&#xff1a;子应用需要在接口调用和页面渲染时&#xff0c;需要用到主应用登录之后拿到的用户数据 逻辑前提&#xff1a; 1、主应用在 main.js中通过 registerMicroApps注册了子应用 2、主应用登录之后将用户数据传递给子应用 >> 原先的做法&#xff08;有问题&…

Hooks 进阶:自定义 Hook 的设计与实践

引言 React Hooks 已成为现代 React 开发的核心范式&#xff0c;而自定义 Hook 则为我们提供了强大的代码复用机制。 自定义 Hook 的基础原理 自定义 Hook 本质上是一种函数复用机制&#xff0c;它允许我们将组件逻辑提取到可重用的函数中。与传统的高阶组件(HOC)和 render …

锂电电动扭剪扳手市场报告:现状、趋势与竞争格局深度解析

一、锂电电动扭剪扳手市场概述 锂电电动扭剪扳手作为建筑施工、钢结构安装等领域的关键工具&#xff0c;凭借其便携性、高效性及环保特性&#xff0c;正逐步替代传统手动及气动工具。该设备通过锂电池供电&#xff0c;结合智能扭矩控制技术&#xff0c;可精准完成高强度螺栓的…

[面试精选] 0076. 最小覆盖子串

文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 76. 最小覆盖子串 - 力扣&#xff08;LeetCode&#xff09; 2. 题目描述 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字…

rabbitmq的高级特性

一.发送者的可靠性 1.生产者重试机制 修改publisher模块的application.yaml文件 spring:rabbitmq:connection-timeout: 1s # 设置MQ的连接超时时间template:retry:enabled: true # 开启超时重试机制initial-interval: 1000ms # 失败后的初始等待时间multiplier: 1 # 失败后下…

北京大学肖臻老师《区块链技术与应用》公开课:02-BTC-密码学原理

文章目录 1.比特币中用到的密码学的功能2. hash3. 签名 1.比特币中用到的密码学的功能 比特币中用到密码学中两个功能&#xff1a; hash、 签名。 2. hash hash函数的三个特性&#xff1a;抗碰撞性&#xff08;Collision Resistance&#xff09;、隐蔽性&#xff08;Hiding&…

Spring Cloud Gateway高并发限流——基于Redis实现方案解析

本文是一个基于 Spring Cloud Gateway 的分布式限流方案&#xff0c;使用Redis Lua实现高并发场景下的精准流量控制。该方案支持动态配置、多维度限流&#xff08;API路径/IP/用户&#xff09;&#xff0c;并包含完整的代码实现和性能优化建议。 一、架构设计 #mermaid-svg-vg…

SpringAI--RAG知识库

SpringAI–RAG知识库 RAG概念 什么是RAG&#xff1f; RAG(Retrieval-Augmented Genreation&#xff0c;检索增强生成)是一种结合信息检索技术和AI内容生成的混合架构&#xff0c;可以解决大模型的知识时效性限制和幻觉问题。 RAG在大语言模型生成回答之前&#xff0c;会先从…

【PhysUnits】14 二进制数的标准化表示(standardization.rs)

一、源码 这段代码主要用于处理二进制数的标准化表示。它定义了两个特质(trait) IfB0 和 IfB1&#xff0c;以及它们的实现&#xff0c;用于处理二进制数的前导零及前导一的简化。 use super::basic::{B0, B1, Z0, N1, Integer, NonZero, NonNegOne};/// 处理 B0<H> 类型…

将 ubutun 的网络模式 从NAT 改到 桥接模式后,无法上网,linux 没有IP地址 的解决方案

首先要将 ubutun 的网络模式设置为桥接模式 这里再从 NAT 模式改动成 桥接模式的时候&#xff0c;还出现了一个问题。改成桥接模式后&#xff0c;linux没有ip地址了。原因是 不知道什么时候 将 虚拟网络编辑器 中的值改动了 要选择这个 自动 选项

多模态大语言模型arxiv论文略读(九十)

Hybrid RAG-empowered Multi-modal LLM for Secure Data Management in Internet of Medical Things: A Diffusion-based Contract Approach ➡️ 论文标题&#xff1a;Hybrid RAG-empowered Multi-modal LLM for Secure Data Management in Internet of Medical Things: A Di…